簡體   English   中英

如何在 c 中將 int 轉換為 byte?

[英]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

  • intint8_t的轉換是在 C 中在賦值時隱式完成的。 不需要演員表。

     int num = 167; int8_t b = num;

byte是一個 java 簽名的 integer 類型,范圍為-128127 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 位字節視為0255范圍內的無符號量更為常見,對此可以使用類型uint8_tunsigned 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM