簡體   English   中英

c,big-endian系統中的十六進制表示

[英]c, hex representation in big-endian system

結果是什么:

int x = 0x00000001;
int y = 0x80000000;

在大端系統中?

我的目標是定義一個設置了第一個(內存中)位的int,而不管它是最高有效位還是最低有效位。 我知道對於小端系統,x可以滿足此要求,但是在大端系統中,它仍然適用嗎?

我很確定在以下兩個系統中都可以使用:

char c[4] = {0x80, 0, 0, 0};
int x = (int) c;

那是對的嗎? 有沒有更優雅的方法?

(我沒有可以進行試驗的大端系統)

您可能想要的是:

int x = 0;
char* p = (char*)&x;
p[0] = 0x01;

上面的代碼會將int變量的最低地址字節中的最低有效位設置為1:

  • 在Big-Endian處理器上,它將MS字節中的LS位設置為1(即x == 0x10000000 )。
  • 在Little-Endian處理器上,它將LS字節中的LS位設置為1(即x == 0x00000001 )。

話雖如此,您對“第一位”的定義是什么? 恕我直言,它只是最低有效位,在這種情況下,無論處理器的字節序如何, int x = 0x00000001都是答案!


以下術語可能有助於您更好地理解:

  • 設置8位字節中的最低有效位:0x01
  • 設置8位字節中的最高有效位:0x80
  • 將最低有效字節設置為4字節整數:0x000000FF
  • 設置4字節整數中的最高有效字節:0xFF000000
  • 在LE處理器上以4字節整數設置最低地址字節:0x000000FF
  • 在BE處理器上以4字節整數設置最低地址字節:0xFF000000
  • 在LE處理器上以4字節整數設置最高地址字節:0xFF000000
  • 在BE處理器上以4字節整數設置最高地址字節:0x000000FF

你可以嘗試工會

union foo
{
  char array[8];
  int64_t num;
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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