【问题标题】:How to get the value of memory address in C如何在C中获取内存地址的值
【发布时间】: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 十六进制。 54 dec 是 36 十六进制。 118 dec 是 76 十六进制,依此类推。使用相同的数据类型,并使用相同的格式说明符。
  • 没错,因为c 是有符号的,所以state 中任何大于等于128(80 hex)的值都会被打印为负数。此外,您将一个打印为十六进制,另一个打印为十进制,因此无论哪种方式,输出都会有所不同。

标签: c arrays memory


【解决方案1】:

谢谢大家!

现在解决了。我将 c 数组设为无符号,这解决了问题

unsigned char c[16];

char copyArray(unsigned char* state, unsigned char* key)
{

for (int i = 0; i < 16; i++)
{
    state[i] ^= key[i];

    printf("%02x", state[i]);
}

printf("\n");

memcpy (c, state,16);

for (int i = 0; i < 16; ++i)
{
    printf("%02x\n",c[i] );
}
printf("\n");

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-05
    • 2012-08-31
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多