有人可以澄清这里发生了什么,给我一个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。
谢谢!
答案 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
希望有所帮助!