【发布时间】:2015-07-02 10:30:57
【问题描述】:
我正在努力学习如何将四个单独的值打包到一个字节中。我试图获得0x91 的十六进制输出,二进制表示应该是10010001,但我得到的输出分别为:0x1010001 和16842753。或者有更好的方法吗?
uint8_t globalColorTableFlag = 1;
uint8_t colorResolution = 001;
uint8_t sortFlag = 0;
uint8_t sizeOfGlobalColorTable = 001;
uint32_t packed = ((globalColorTableFlag << 24) | (colorResolution << 16) | (sortFlag << 8) | (sizeOfGlobalColorTable << 0));
NSLog(@"%d",packed); // Logs 16842753, should be: 10010001
NSLog(@"0x%02X",packed); // Logs 0x1010001, should be: 0x91
【问题讨论】:
-
试试 NSLog(@"%x", packed) 你会看到正在发生的事情。问题不在于算术,而在于您的 NSLog 格式。
-
@CharlieBurns 我试过了,现在我得到:
1010001缺少一个0位 -
不,不是。您希望在哪里看到另一个零?
-
哦,我明白了。前导零被去除。
-
你正在制作一个 32 位整数,为什么你期望一个 8 位的值? :)
标签: objective-c c hex bitwise-operators