十六进制数对于长long int来说太大了?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十六进制数对于长long int来说太大了?相关的知识,希望对你有一定的参考价值。
希望你能帮助我:)
我订购了一个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);
我输入10到0的数字0到F,但只打印8个数字/字符。
必须有某种整数溢出,但据我所知:
十六进制1位= 4位。那么10位十六进制数字= 40位? - long long int应该足够了!
如果我的直觉是正确的,并且发生整数溢出,那么我该如何解决这个问题呢?显然没有变量大到足以容纳10位十六进制值?
最好的问候尼古拉斯 - 丹麦
你确定你的long long int是64位宽,你的环境,嵌入式,PC,32位还是64位?编译器?
如果你的编译器像gcc一样符合C99,你也可以使用stdint.h
和uint64_t
,它保证独立于64位宽。
您应该重新检查您的printf()
文档,例如在我的64位OpenSuse框中使用gcc a long
以及long lont int
通过sizeof()
是64位宽。要打印它们我使用:
printf(" %llx ",hexNumber)
10个十六进制字符只有40位。 long long int
保证至少为64位,因此可以使用。
问题实际上在你的printf格式字符串中 - %lx
是unsigned long int
的正确格式字符串,而不是long long int
。要打印long long int
,你应该使用%lld
- 如果你想用十六进制打印它,你应该将其声明为unsigned long long int
,并使用%llx
。
您正在使用%lx进行扫描和打印。
据我所知,格式字符串%lx是一个long int,而不是long long int。根据您的硬件,您可能只获得32位长整数。
其他一个人建议使用%llx,长期使用int。试试这件事并不会有什么坏处。
将数字输入管理大小的部分并将其存储为字符串。无限长的那种方式。
标签以十六进制发送代码 - 10个字符
我很确定你的意思是“标签将RFID作为10个字符的ASCII字符串发送,仅限于16个十六进制数字”
我试图将这个数字存储在一个long long int变量中,
为什么?
int
及其朋友是算术类型。您可以使用它们来存储计划执行算术运算的值。你递增它们,向它们添加73,将它们向左移位3,按位或它们,或者将它们用作索引。
但RFID只是一个名字。你没有对名称做任何这些事情,因为这样做没有意义。你不会说“kermit the frog”+8,或“miss piggy”<< 7或“fozzie bear”%3。 RFID就是这样。你只需阅读RFID,比较它们,或者哈希,然后将它们写出来。它们是不可分割的,不可思议的“魔法曲奇”字符串 - 它们只是代币。
所以你应该把它存储为一个字符串。将它读入int并将其写回int中的字符串不仅会产生两个不必要的转换,它在语义上毫无意义。
以上是关于十六进制数对于长long int来说太大了?的主要内容,如果未能解决你的问题,请参考以下文章