【发布时间】:2015-02-26 23:44:16
【问题描述】:
我只想将 4 个字符组合成一个无符号长变量,如下所示。
char y[16];
unsigned long Timer ;
y[12] = '1' ;
y[13] = '0' ;
y[14] = '1' ;
y[15] = '1' ;
Timer = y[15] - '0' ;
Timer |= (unsigned long) (y[12] - '0' << 24);
Timer |= (unsigned long) (y[13] - '0' << 16);
Timer |= (unsigned long) (y[14] - '0' << 8);
printf("%lu" , Timer);
我希望 Timer 等于 1011,但我一直得到 1 作为输出。
【问题讨论】:
-
括号的位置有问题。 y[] 的值是字节,因此将一个字节向左移动 8 位或更多位会导致 0。建议 '(unsigned long)(y[12] - '0')
-
值得一问,您使用的是什么类型的处理器/编译器。具体来说,是无符号长 32 位吗?这也是字的大小吗?什么是字节序?这个问题的一些使用移位操作的答案可能无法移植到另一个不具有相同字节序的处理器。编辑:我看到你的标签 MPLAB,所以我假设你使用的是 PIC,对吗?如果是这样,是 16 位还是 32 位?
-
我正在使用 PIC18,但问题已在下面得到解答。
标签: c microcontroller mplab