如何使用C语言将这一系列位 "000001111110001"(15 位)存储在变量中.
我试图将它存储到unsigned int:
unsigned int key=000001111110001;
Run Code Online (Sandbox Code Playgroud)
但它没有,所以请帮助我.
通常,这些位一次分解为4位,然后转换为十六进制表示:
unsigned int key = 0x03F1;
Run Code Online (Sandbox Code Playgroud)
您可以选择一次将位分解为3位,并使用八进制表示(01761),或使用常规十进制表示(1009).
如果你想使用位,你可以像这样自己构建它:
unsigned int key = (1<<9)|(1<<8)|(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<0);
Run Code Online (Sandbox Code Playgroud)
或者,也许稍微更麻烦:
#define b4(x) \
((((0##x >> 9) & 01) << 3) | \
(((0##x >> 6) & 01) << 2) | \
(((0##x >> 3) & 01) << 1) | \
(((0##x >> 0) & 01) << 0))
#define b8(x1, x0) ((b4(x1) << 4) | b4(x0))
#define b16(x3, x2, x1, x0) ((b8(x3, x2) << 8) | b8(x1, x0))
unsigned int key = b16(0000,0011,1111,0001);
Run Code Online (Sandbox Code Playgroud)
宏b4(x)期望x为4个二进制数字作为输入,并将其转换为12位八进制数(即3位用于表示单个二进制数字).然后,它将该12位八进制数转换为真正的4位数.b8(a,b),并b16(a,b,c,d)延伸b4(x).
Fancier宏技巧可以帮助您以更加自动化的方式实现.参见例如P99.