【发布时间】:2025-12-23 21:20:27
【问题描述】:
我有一个指向 char 数组的指针,我需要继续使用 64 位掩码对每个字节进行异或。我认为最简单的方法是将每个 8 个字节读取为一个 long long 或 uint64_t 并与之异或,但我不确定如何。也许投射到long long* 并取消引用?一般来说,我仍然对指针非常不确定,因此任何示例代码也将不胜感激。谢谢!
编辑:示例代码(只是为了显示我想要的,我知道它不起作用):
void encrypt(char* in, uint64_t len, uint64_t key) {
for (int i = 0; i < (len>>3); i++) {
(uint64_t*)in ^= key;
in += 8;
}
}
}
【问题讨论】:
-
如果你想走那条路,你需要确保你的 char[] 正确对齐。在性能需要之前,一次处理一个字节会更安全。
-
@TheAbelo2 :在您测量并发现最简单的正确解决方案的性能不足之前,性能不是至关重要。
-
&in ^= key;你的意思可能是*in ^= key; -
它不起作用的原因之一是您正在对
in的地址而不是其内容进行异或运算。(long *)in ^= key; -
我知道将 64 位整数排列为 8 个字节序列的三种“明显正确”的方式,而且我很确定我在普通台式计算机上见过这三种方式-- 你真的不应该依赖以任何特定方式排列的 64 位整数的内容。
标签: c++ arrays pointers char uint64