C - 将字符ASCII值复制到64位整数

时间:2013-02-05 04:17:42

标签: c ascii

众所周知,每个可打印字符都有其ascii值。我正在尝试将8个字符的ascii值设置为64位整数,但它只复制32位。

char * ch = "AAAABBBB";
unsigned long int i;

//copy charater's ascii to 64 bits int
memcpy(&i, ch, 8);
printf("integer hold: 0x%x\n", i); 

这段代码有问题吗?

我期望的输出是:

integer hold: 0x4141414142424242

但输出是:

integer hold: 0x41414141

3 个答案:

答案 0 :(得分:2)

如果unsigned long确实是64位类型(您可以输出sizeof(unsigned long)来检查),那么需要使用%lx格式字符串来打印它。

如果unsigned long是32位,您可能不得不诉诸unsigned long long并使用%llx格式字符串。

来自C11 7.20.6.1 The fprintf function

  

o,u,x,X unsigned int参数在样式dddd中转换为无符号八进制(o),无符号十进制(u)或无符号十六进制表示法(x或X);字母abcdef用于x转换,字母ABCDEF用于X转换。精度指定要显示的最小位数;如果转换的值可以用更少的数字表示,则使用前导零进行扩展。默认精度为1.转换零值且精度为零的结果不是字符。

     

l(ell):指定以下d,i,o,u,x或X转换说明符适用于long int或unsigned long int参数。

     

ll(ell-ell):指定以下d,i,o,u,x或X转换说明符适用于long long int或unsigned long long int参数。

答案 1 :(得分:-1)

longlong long

在VC ++中,long数据类型仍然只有32位。

当然,printf格式%x用于int,在大多数平台上为32位。如果您的%llx已经是64位,则需要%lx(或可能long

答案 2 :(得分:-1)

%x用于打印unsigned int值&它的32位就是你得到这样结果的原因。

%d %i     Decimal signed integer.
%o        Octal integer.
%x %X     Hex integer.
%u        Unsigned integer.
%c        Character.
%s        String.
%f        double
%e %E     double.
%g %G     double.
%p        pointer.

&安培;如果你想打印剩余的数据,试试......

int *p;
p=(char *)(&i)+4;

printf("integer hold: 0x%x\n", i);
printf("integer hold: 0x%x\n",*p);