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