【发布时间】:2014-02-02 06:13:24
【问题描述】:
我正在尝试反转 64 位地址指针的字节以进行分配并使用以下代码:
char swapPtr(char x){
x = (x & 0x00000000FFFFFFFF) << 32 | (x & 0xFFFFFFFF00000000) >> 32;
x = (x & 0x0000FFFF0000FFFF) << 16 | (x & 0xFFFF0000FFFF0000) >> 16;
x = (x & 0x00FF00FF00FF00FF) << 8 | (x & 0xFF00FF00FF00FF00) >> 8;
return x;
}
但是,它只是把一切都搞砸了。但是,类似的功能对于 64 位长度非常有效。指针有什么不同需要做的吗?
我进行函数调用的方式会不会是个问题?
对于指针:
*(char*)loc = swapPtr(*(char*)loc);
很久了:
*loc = swapLong(*loc);
【问题讨论】:
-
char不是正确的数据类型。它(通常)是一个 8 位字节。如果您使用的是 64 位字符的平台,请提及。 -
是的,它在 x86_64 架构上
-
那么一个 char 是 8 位。它不可能保存 64 位的值。
标签: c byte reverse swap endianness