gpt4 book ai didi

c - Printf() 打印字符为 32 位

转载 作者:太空狗 更新时间:2023-10-29 14:58:35 24 4
gpt4 key购买 nike

我正在运行一个快速测试以确保我的指针算术正确:

ma​​in.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++ );
}
}

我期望的是 ADDRESS 的字节以十六进制格式首先打印出 LSB。但最后 3 个字节似乎以 32 位长度打印:

1
15
FFFFFFA1
FFFFFFDC
FFFFFFC0
Press any key to continue . . .

这是由于我的移位算法、某些特定于编译器的东西、某些 printf() 行为造成的吗?

(我在 Windows 10 上使用 MinGW GCC v6.3.0 进行编译。)

最佳答案

我相信您的 char 被用作有符号值,并且您看到的是 FFFF,因为 0xA1 大于0x80 因此显示为已签名。尝试使用 unsigned char 指针(以及函数原型(prototype)中的 nums 数组和 data),问题应该会消失。

关于c - Printf() 打印字符为 32 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49327163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com