我正在运行一个快速测试,以确保我的指针算术运算:
main.c中
#include <stdio.h>
#include <stdlib.h>
#define ADDRESS 0xC0DCA11501LL
#define LENGTH 5
void print_address( char *, char );
/* Main program */
int main( int argc, char *argv[] )
{
char nums[ LENGTH ];
/* LSB first */
for( int i = 0; i < LENGTH; i++ )
{
nums[ i ] = ( ADDRESS >> ( 8 * i ) ) & 0xFF;
}
print_address( nums, LENGTH );
system("PAUSE");
return 0;
}
void print_address( char *data, char len )
{
char *data_ptr = data;
while( len-- )
{
printf( "%X\n", *data_ptr++ );
}
}
Run Code Online (Sandbox Code Playgroud)
我期望的是以ADDRESS十六进制格式首先打印出LSB 的字节.但最后3个字节似乎以32位长度打印:
1
15
FFFFFFA1
FFFFFFDC
FFFFFFC0
Press any key to continue . . .
Run Code Online (Sandbox Code Playgroud)
这是由于我的位移算术,特定于编译器,某些printf()行为?
(我在Windows 10上使用MinGW GCC v6.3.0进行编译.)
我相信你char是一个被用作签名值的人,并且你看到FFFFs因为0xA1大于0x80并因此显示签名.尝试使用unsigned char指针(对于nums数组和data函数原型),问题应该消失.
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |