首先,当您想使用字节时,您应该使用 unsigned char 或 uint8_t。
这个函数把一个字节变成一个可打印的字符串(你可以使用 printf 或 puts 和 "bits" 数组):
void char2bits(unsigned char c, unsigned char bits[8]) {
int shift, i;
for(shift = 7, i = 0; i < 8; --shift, ++i)
bits[i] = ((c >> shift) & 0x1) + '0';
}
发生了什么?
其中 c = 250 = 1111 1010
首先你的 bits 表是空的,所以:
位 = ""
步骤 i = 0:
(c >> shift) = 右移 7 = 0000 0001
(c >> shift) & 0x1 = 只保留最后一位 = 0000 0001
((c >> shift) & 0x1) + '0' = ((c >> shift) & 0x1) + 48 = 48 + 1 = 49 = '1' in ascii
所以位 = "1";
步骤 i = 1:
(c >> shift) = 右移 6 = 0000 0011
(c >> shift) & 0x1 = 只保留最后一位 = 0000 0001
((c >> shift) & 0x1) + '0' = ((c >> shift) & 0x1) + 48 = 48 + 1 = 49 = '1' in ascii
所以位 = "11";
步骤 i = 2:
(c >> shift) = 右移 5 = 0000 0111
(c >> shift) & 0x1 = 只保留最后一位 = 0000 0001
((c >> shift) & 0x1) + '0' = ((c >> shift) & 0x1) + 48 = 48 + 1 = 49 = '1' in ascii
所以位 = "111";
步骤 i = 3:
(c >> shift) = 右移 4 = 0000 1111
(c >> shift) & 0x1 = 只保留最后一位 = 0000 0001
((c >> shift) & 0x1) + '0' = ((c >> shift) & 0x1) + 48 = 48 + 1 = 49 = '1' in ascii
所以位 = "1111";
步骤 i = 4:
(c >> shift) = 右移 3 = 0001 1111
(c >> shift) & 0x1 = 只保留最后一位 = 0000 0001
((c >> shift) & 0x1) + '0' = ((c >> shift) & 0x1) + 48 = 48 + 1 = 49 = '1' in ascii
所以位 = "11111";
步骤 i = 5:
(c >> shift) = 右移 2 = 0011 1110
(c >> shift) & 0x1 = 只保留最后一位 = 0000 0000
((c >> shift) & 0x1) + '0' = ((c >> shift) & 0x1) + 48 = 0 + 48 = 48 = '0' in ascii
所以位 = "111110";
步骤 i = 6:
(c >> shift) = 右移 1 = 0111 1101
(c >> shift) & 0x1 = 只保留最后一位 = 0000 0001
((c >> shift) & 0x1) + '0' = ((c >> shift) & 0x1) + 48 = 1 + 48 = 49 = '1' in ascii
所以位 = "1111101";
步骤 i = 7:
(c >> shift) = 右移 0 = 1111 1010
(c >> shift) & 0x1 = 只保留最后一位 = 0000 0000
((c >> shift) & 0x1) + '0' = ((c >> shift) & 0x1) + 48 = 0 + 48 = 48 = '0' in ascii
所以位 = "11111010";
希望对您有所帮助。