【发布时间】:2012-01-13 08:18:33
【问题描述】:
希望你能帮帮我:)
我已经订购了一个 RFID 标签和扫描仪,用于业余爱好。标签正在向标签发送输入,我想在 C 程序中使用。
问题是.. 标记正在发送十六进制代码 - 10 个字符 - 长。
我尝试将这个数字存储在一个 long long int 变量中,但它似乎不起作用。
当我使用 printf 打印变量时,只打印前 8 个字符。其余部分(2 位数字省略)。
long long int n1;
n1 = recieve_data();
printf("%lx", n1);
我也尝试自己输入 10 位十六进制数,这样做:
long long int n1;
scanf("%lx", &n1);
printf("%lx", n1);
我输入了 0 到 F 的 10 位数字,但只打印了 8 位数字/字符。
一定有某种整数溢出,但据我所知:
1 位十六进制数 = 4 位。那么十六进制的 10 位数字 = 40 位? - long long int 应该足够了!
如果我的直觉是正确的,并且发生整数溢出,那么我该如何解决这个问题?显然没有变量大到足以容纳 10 位十六进制值?
最好的问候 尼古拉斯 - 丹麦
【问题讨论】:
-
%lx 不会打印任何前导零。如果十六进制字符串的前两位实际上不是零,那么您没有正确转换十六进制字符串。我们看不到那个代码。
-
我赌的是
sizeof long == 4,所以应该是%llx。
标签: c hex int overflow long-integer