c - 十六进制数的值太多

时间:2013-08-14 23:10:31

标签: malloc signed

有人可以澄清这里发生了什么,给我一个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设置为unsigned char。

谢谢!

1 个答案:

答案 0 :(得分: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

希望有所帮助!