C 十六进制数对于长整型太大?

C 十六进制数对于长整型太大?,c,hex,int,overflow,long-integer,C,Hex,Int,Overflow,Long Integer,希望您能在这里帮助我: 我订购了一个RFID标签和扫描仪,供业余爱好使用。标记正在向标记发送输入,我想在C程序中使用它 问题是。。标记正在发送一个十六进制代码,长度为10个字符 我试图将这个数字存储在一个长整型变量中,但它似乎不起作用 当我使用printf打印变量时,只打印前8个字符。其余2位数字被省略 long long int n1; n1 = recieve_data(); printf("%lx", n1); 此外,我还尝试自己输入10位十六进制数,具体操作如下: long long

希望您能在这里帮助我:

我订购了一个RFID标签和扫描仪,供业余爱好使用。标记正在向标记发送输入,我想在C程序中使用它

问题是。。标记正在发送一个十六进制代码,长度为10个字符

我试图将这个数字存储在一个长整型变量中,但它似乎不起作用

当我使用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到F,但只打印8位/字符

一定有某种整数溢出,但据我所知:

十六进制中的1位=4位。那么十六进制中的10位=40位?-long int应该足够了

如果我的直觉是正确的,并且出现了整数溢出,那么我该如何解决这个问题呢?显然没有足够大的变量来保存10位十六进制值

致意
Nicolas-丹麦

您确定您的long int是64位宽,您的环境是什么,嵌入式,PC,32位还是64位?编译程序


如果您的编译器是C99兼容的,比如gcc,那么您也可以使用stdint.h和uint64_t,这保证独立于平台,并且是64位宽的

您应该重新检查您的printf文档,例如在我的64位OpenSuse框中,gcc a long和long lont int通过sizeof是64位宽的。要打印它们,我使用:


printf%llx,hexNumber

您确定您的long-long int是64位宽的,您的环境是什么,嵌入式,PC,32位还是64位?编译程序


如果您的编译器是C99兼容的,比如gcc,那么您也可以使用stdint.h和uint64_t,这保证独立于平台,并且是64位宽的

您应该重新检查您的printf文档,例如在我的64位OpenSuse框中,gcc a long和long lont int通过sizeof是64位宽的。要打印它们,我使用:


printf%llx,hexNumber

在管理大小的零件中输入数字,并将其存储为字符串。无限长。

将数字放入管理大小的零件中,并将其存储为字符串。无限长。您正在使用%lx进行扫描和打印

据我所知,格式化字符串%lx是一个长整型,而不是一个长整型。根据您的硬件,长整型只能得到32位


另一个家伙建议使用%llx表示long-long-int。尝试一下也无妨。

您正在使用%lx进行扫描和打印

据我所知,格式化字符串%lx是一个长整型,而不是一个长整型。根据您的硬件,长整型只能得到32位


另一个家伙建议用%llx表示长整型。试试看也无妨。

10个十六进制字符只有40位。long int保证至少为64位,因此适合您使用


问题实际上在于printf格式字符串-%lx是无符号长整型的正确格式字符串,而不是长整型。要打印长整型,应使用%lld-如果要以十六进制打印,应将其声明为无符号长整型,并使用%llx。

10个十六进制字符仅为40位。long int保证至少为64位,因此适合您使用

问题实际上在于printf格式字符串-%lx是无符号长整型的正确格式字符串,而不是长整型。要打印长整型,应使用%lld-如果要以十六进制打印,应将其声明为无符号长整型,并使用%llx

标记正在发送十六进制代码-10个字符

我很确定你的意思是标签以10个字符的ASCII字符串发送RFID,限制为16个十六进制数字

我试着把这个数字存储在一个长整型变量中

为什么?

int及其友元是算术类型。您可以使用它们来存储计划对其执行算术运算的值。您可以递增它们,向它们添加73,将它们向左位移3,按位或按位,或将它们用作索引

但RFID只是一个名字。你不会对一个名字做这些事情,因为这样做没有意义。你不会说青蛙克米特+8,或小猪小姐 标记正在发送十六进制代码-10个字符

我很确定你的意思是标签以10个字符的ASCII字符串发送RFID,限制为16个十六进制数字

我试着把这个数字存储在一个长整型变量中

为什么?

int及其友元是算术类型。您可以使用它们来存储计划对其执行算术运算的值。您可以递增它们,向它们添加73,将它们向左位移3,按位或按位,或将它们用作索引

但RFID只是一个名字。你不会对一个名字做这些事情,因为这样做没有意义。你不会说青蛙克米特+8,或者
小猪小姐%lx不会打印任何前导零。如果十六进制字符串的前两位数字实际上不是零,那么您没有正确转换十六进制字符串。我们看不到该代码。我打赌sizeof long==4,所以它应该是%llx。%lx不会打印任何前导零。如果十六进制字符串的前两位数字实际上不是零,那么您没有正确转换十六进制字符串。我们看不到该代码。我打赌sizeof long==4,所以它应该是%llx。谢谢大家,结果是我需要在Microsoft系统上将数字存储为%l64。将该数字放入管理大小的部分,并将其存储为字符串。那样就无限长了。你们将如何做到这一点?谢谢各位,事实证明我需要在Microsoft系统上将数字存储为%l64。将数字放入管理大小的部件中,并将其存储为字符串。那样就无限长了。如果你的编译器是C99,那么长long int至少保证64位长。在所有编译器和嵌入式平台都没有保证的情况下,甚至有人用VisualStudioC++来做C。我特别针对你的段落,如果你的编译器是C99兼容的,如果你的编译器是C99兼容的,那么长的IN至少保证64位。所有的编译器和嵌入式平台都没有保证,甚至有人用VisualStudioC++来做C。我是专门回应你的段落的,如果你的编译器是C99兼容的。。。