簡體   English   中英

無符號字符的數組聲明

[英]Array declaration of an unsigned char

我有一個問題,它指出unsigned char數組存儲unsigned int ,每個int只使用3個字節。

為什么我的老師會像這個unsigned char s[]="\\x12\\x34\\x78\\x9A\\xBC\\xDE\\xFF"一樣初始化向量,而不僅僅是使用整數? 我相信這些數字用十六進制表示?

可能是因為你的老師對他的記憶力使用很吝嗇。

通過使用unsigned char的“壓縮”數組,每個24位整數只能使用24位存儲(假設一個8位char ,我希望這里不是很有爭議)。

請注意,選擇使用字符串表示法也會使其在源代碼中更加緊湊(盡管可讀性較差); 第一個整數是"\\x12\\x34\\x78" ,其中數組符號為0x12, 0x34, 0x78 ,由於逗號(和空格,當然可以刪除,不像逗號)更長。

可能的折衷方案可能是使用C相鄰字符串文字連接的事實,並將每個24位數字寫為自己的字符串:

unsigned char s[] = "\x12\34\x78" "\x9a\xbc\xde";

這樣可以更容易地發現每個數字的邊界,但當然重復的引號會占用空間。

你可以像這樣提取一個整數:

unsigned int unpack24(size_t index)
{
  if(index >= (sizeof s) / 3)
    return 0;
  const unsigned int hi  = s[3 * index];
  const unsigned int mid = s[3 * index + 1];
  const unsigned int low = s[3 * index + 2];
  return low | (mid << 8) | (hi << 16);
}

注意,上面假設是big-endian數字,所以第一個將解包為0x123478 ; 我當然不知道這是對的。

暫無
暫無

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

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