【发布时间】:2018-11-04 19:35:58
【问题描述】:
我正在尝试访问内存访问的值,但在打印输出时我不断获取地址。
char c[16];
char copyArray(unsigned char* state, unsigned char* key)
{
for (int i = 0; i < 16; i++)
{
state[i] ^= key[i];
// c[i] = state[i]; // this gave me the address
printf("%02x", state[i]);
}
printf("\n");
memcpy (c, state,16);
for (int i = 0; i < 16; ++i)
{
printf("%02d\n",c[i] );
}
printf("\n");
}
这个函数在另一个函数中执行了 10 次。我想要实现的是存储上次执行的值而不是地址
【问题讨论】:
-
看起来你已经在做,是什么让你觉得你在打印地址?
-
当我打印 c 数组元素时,它们与状态数组元素不同
-
c数组可能已签名,但state绝对未签名。也许您正在打印负数并将它们误认为是地址。在一种情况下,您使用的是%02x,而在另一种情况下使用的是%02d,因此输出将不同。 -
好的,
03十进制是03十六进制。54dec 是36十六进制。118dec 是76十六进制,依此类推。使用相同的数据类型,并使用相同的格式说明符。 -
没错,因为
c是有符号的,所以state中任何大于等于128(80hex)的值都会被打印为负数。此外,您将一个打印为十六进制,另一个打印为十进制,因此无论哪种方式,输出都会有所不同。