0

有人可以澄清一下这里发生了什么,这给了我一个 0xffffffa5 与 0xa5 的十六进制值吗?

#define HEXVAL 0xA5

int main(int argc, char *argv[])
{
    int numBytes = 3;
    char *tmp;
    char *pyld;
    pyld = malloc(numBytes * sizeof(char));
    memset(pyld, 0, sizeof(pyld));
    tmp = pyld;

    *(tmp) = HEXVAL;
    printf("out = %x\n", pyld[0]); // -> ffffffa5
 }

我期待“out = a5”而不是所有“out = ffffffa5”。我想将带符号的值添加到 pyld,所以我不想将 pyld 设置为无符号字符。

谢谢!

4

1 回答 1

0

首先,我可以建议使用 calloc 吗?它为您格式化堆空间。

要解决您的问题,您必须使 tmp 无符号。您可以保持 pyld 签名。请记住尊重 tmp 以打印出正确的值。

这是我的工作:

#include <stdio.h>
#include <stdlib.h>

#define HEXVAL 0xA5

int main(int argc, char *argv[])
{
    int numBytes = 3;
    unsigned char *tmp;
    char *pyld;

    pyld = calloc(numBytes, sizeof(char));
    tmp = pyld;
    *tmp = HEXVAL;
    printf("pyld = %X\n", *pyld); 
    printf("tmp = %X\n", *tmp);

    return 0;
 }

这是输出

pyld = FFFFFFA5
tmp = A5

希望有帮助!

于 2013-08-15T00:01:44.510 回答