【发布时间】:2012-07-11 19:07:53
【问题描述】:
使用动态 C 程序(语言是 C),我试图将一个 int 转换为一个 4 位长的字节数组。到目前为止,我在网上查了一些例子。但是,似乎没有一个对我有用。我遇到了一个持续的问题,即打印了正确的字节数,但由于某种原因它们重复了两次。我提供了以下代码:
void main(){
int a=1379;
int i=0;
unsigned char value [4];
value[3] = (byte) (a & (0xFF));
value[2] = (byte) ((a >> 8) & 0xFF);
value[1] = (byte) ((a >> 16) & 0xFF);
value[0] = (byte) ((a >> 24) & 0xFF);
//convert int values to bytes by placing them in a char buffer
for(i=0;i<4;i++){
printf("%d",value[i]);
printf(", ");
}
printf("\n");
}
例如,使用此值,程序会打印“5, 99, 5, 99”,而它应该打印“0, 0, 5, 99”。感谢您的帮助。
【问题讨论】:
-
有些事情你没有告诉我们。
-
我认为这是一种具有 16 位整数的语言(用于微控制器)。
-
你应该初始化你的数组,
unsigned char value[4] = {0};。 -
@pstrjds -- 仅仅因为标题相同并不意味着它是一个骗子。
-
1) main 应该返回 int 2) 删除 (byte) 强制转换(什么是字节?)它们只会造成伤害。 3)移位有符号整数将对它们进行符号扩展,最好使用无符号实体进行移位。 4) 使用 %u printf 格式打印无符号类型。 5)您假设 32 位整数,并且 CHAR_BIT=8。 6) sizeof 是你的朋友。