[英]How to convert int to byte in c?
我想在 C 中將 int 轉換為 byte。 我怎樣才能獲得價值?
in Java
int num = 167;
byte b = num.toByte(); // -89
in C
int num = 167;
???
您可以簡單地轉換為一個字節:
unsigned char b=(unsigned char)num;
請注意,如果num
大於 255 或小於 0 C 不會崩潰,只會給出錯誤的結果。
原生 C 中沒有 Byte 這種類型。 雖然如果你不想導入新的庫,你可以像這樣創建一個:
typedef unsigned char Byte
然后用它創建任何你想要的變量:
int bar = 15;
Byte foo = (Byte)bar
在計算機科學中,術語字節被明確定義為 8 位的原始數據塊。 顯然 Java 使用與計算機科學不同的定義......
-89
不是“轉換為字節”的值167
。 167
已經適合一個字節,因此無需轉換。
-89
是將值167
轉換為 8 位表示的有符號 2 的補碼。
用於 C 中帶符號 2 的補碼 8 位整數的最正確類型是int8_t
來自stdint.h
。
從int
到int8_t
的轉換是在 C 中在賦值時隱式完成的。 不需要演員表。
int num = 167; int8_t b = num;
byte
是一個 java 簽名的 integer 類型,范圍為-128
到127
。 C 中的對應類型是int8_t
定義在<stdint.h>
中,用於具有 8 位字節的體系結構。 它是signed char
的別名。
你可以寫:
#include <stdint.h>
void f() {
int num = 167;
int8_t b = num; // or signed char b = num;
...
如果您的編譯器發出關於隱式轉換為較小類型的警告,您可以添加顯式轉換:
int8_t b = (int8_t)num; // or signed char b = (signed char)num;
但是請注意,將 8 位字節視為0
到255
范圍內的無符號量更為常見,對此可以使用類型uint8_t
或unsigned char
。 java byte
是有符號類型的原因可能是該語言中沒有無符號類型,但對於非母語讀者來說卻相當混亂。
byte
也可以定義為 typedef:
typedef unsigned char byte; // 0-255;
或者
typedef signed char byte; // -128-127;
不要使用char
類型,因為默認情況下此類型是有符號還是無符號是由實現定義的。 為 C 字符串中的字符保留類型char
,盡管許多函數實際上認為這些是無符號的: strcmp()
,函數來自<ctype.h>
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.