C - 为什么我的缓冲区打印不正确?

标签 c printf hex buffer

我有两个对象,Header 和 DF。 让我们说

header = CCCCCC7E

DF = 01020304

缓冲区的值不应该是CCCCCC7E01020304吗?

出于某种原因,当我打印它时,我得到:

7EFFFFFCCFFFFFFFCCFFFFFFFCCFFFFFFFCCFFFFFFFCCFFFFFFFCCFFFFFFFCCFFFFFFFCCFFFFFFFCC00FFFF FFCC00000000000004030201FFFFFF8967341200000000

这就是我打印它的方式:

for (int i = 0; i < sizeof(buffer); i++)
{ printf("%02X", buffer[i]); }

这是代码:

    struct Header header;
    struct Data_Format DF;
    unsigned char buffer[TOTAL_SIZE];

    header.Start = 0x7E;
    header.Options = 0x00;
    header.PacketLength = 0x00;
    header.VCP = 0x00;
    header.Reserved = 0x00;
    header.Return = 0x00;

    DF.Address = 0x01020304; //real value: NULL
    DF.Result = 0x1234; //real value: NULL
    DF.Size = 0x6789; //real value: NULL

    memcpy(buffer,&header, sizeof(Header));
    memcpy(buffer+sizeof(Header), &DF, sizeof(Data_Format));

最佳答案

从给出的部分代码来看,它没有给出太多想法,但有些地方需要做。

在处理缓冲区之前始终执行 memset。

memset(buffer, 0, sizeof(buffer)) 

这将阻止您获得垃圾。

关于C - 为什么我的缓冲区打印不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25760847/

相关文章:

c - 具有 __int64 地址的 ReadProcessMemory

c - 将表示不同类型的两个结构加在一起

c - 断言标准输入是开放的

c - C 中有效的 printf() 语句

java - 这是一个有效的十六进制值吗?

在一个字节中转换两个 ASCII 十六进制字符(两个 ASCII 字节)

c - 下载控制板软件模拟器

c - 在 C 中的多列中打印 ASCII 字符

C: printf char* 返回奇怪的最后一个字符

r - 如何使用 as.hexmode 宽度