繁体   English   中英

long int转换为char:C中的奇怪输出

[英]Long int to char: strange output in C

我有以下字符序列:

    char* input = "3243f6a8885a308d313198a2e0370734";

然后,我尝试从input提取前两个字符并将其存储为数字,如下所示:

char state_col[9];
char state_col_t[3];

memcpy(state_col, input, 8);
state_col[8] = 0;
state_col_t[0] = state_col[0]; state_col_t[1] = state_col[1]; state_col_t[2] = 0;
long int value = strtol(state_col_t, &endptr, 16);
char c_value = value;

当我尝试打印结果时:

printf("%x %x", c_value, value);

我得到这个(例如):

32 32

43 43

f6

ffffffa8 a8

似乎与> 0x80的值有关。 有想法吗?

char是否带符号是实现定义的,如何将太大的整数转换为带符号的整数也是实现定义的。

您应该将unsigned charuint8_t用作c_value

请注意,您必须在inttypes.h (或stdint.h )中包含uint8_t

顺便说一句,您通过将类型错误的数据传递给printf()来调用未定义的行为 打印十六进制long int类型的数据的正确格式说明符为%lx

由于整数提升,将%x用于charunsigned charuint8_t应该可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM