任何人都可以告诉我什么是下面的代码错?数据类型转换(无符号long long到char)
__inline__
char* ut_byte_to_long (ulint nb) {
char* a = malloc(sizeof(nb));
int i = 0;
for (i=0;i<sizeof(nb);i++) {
a[i] = (nb>>(i*8)) & 0xFF;
}
return a;
}
此字符串然后再连接到如使用strcat
一个较大的一个的一部分。字符串可以很好地打印,但用于表示为字符符号的整数。我正在使用%s
和fprintf
检查结果。
非常感谢。
编辑
我把下面的意见之一(我是单独加入终止\0
,呼吁fprintf
之前,但strcat
后修改我最初的功能...
__inline__
char* ut_byte_to_long (ulint nb) {
char* a = malloc(sizeof(nb) + 1);
int i = 0;
for (i=0;i<sizeof(nb);i++) {
a[i] = (nb>>(i*8)) & 0xFF;
}
a[nb] = '\0' ;
return a;
}
这示例代码仍未打印出数字...
char* tmp;
tmp = ut_byte_to_long(start->id);
fprintf(stderr, "Value of node is %s \n ", tmp);
“string”? ???终止零字节在哪里? – pmg 2011-12-16 23:36:14
你只是将数字`nb`分解成字节(小端),所以它是一种与字符串/文本不兼容的二进制格式。如果你选择了小数字,你肯定会在那里有一些零字节。 – u0b34a0f6ae 2011-12-16 23:40:56