如何从存储在字节数组中的字节中检索值?

3

我正在尝试将8个字节存储在字节数组中,以存储指针的值。

int main() {
    unsigned long a = 0;
    char buf[8];
    int i = 0;
    int *p = &i;
    a = (unsigned long)p;

    while (i < 8)
    {
        buf[i] = (a >> (8 * i)) & 0xFF;
        i++;
    }
    a = 0;
    i = 0;
    while (i < 8)
    {
        a = ?
        i++;
    }
    p = (int *)a;
}

第一个循环将p按照 usigned long 类型转换为 a 中的连续字节存储,但我不知道如何在第二个循环中检索该值。有人知道吗?


>>的相反操作是<<。而&的相反操作是| - alk
@alk,你所说的“opposite”是什么意思? - qleguennec
1
OT: 最好使用 uintptr_t 而不是 unsigned long,并且定义并使用 size_t ptrsize = sizeof(p),而不是魔法数字 8 - alk
1
在这个上下文中,我将“opposite”指称为对称于第一次循环中执行的步骤的步骤,当在第二个循环中执行与第一个循环中所做相反的操作时。 - alk
如果我添加:a |= buf[i]a <<= 8,就像我之前尝试的一样,会得到不同的结果:先前是 a = 140724635125076,后来是 a = 18446744062955356160 - qleguennec
你确定测试系统上的 long 类型是 8 字节宽度吗? - alk
1个回答

1
这是与您的代码相反的代码:
a = 0;
while (i < 8)
{
    a |= ((unsigned long)buf[i] & 0xff ) << (8 * i);
    i++;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接