gpt4 book ai didi

C:使用 char 数组作为 8 字节 block

转载 作者:行者123 更新时间:2023-12-04 09:27:25 25 4
gpt4 key购买 nike

我有一个字符数组和一个指向它的指针。我需要将前 8 字节(8 字节的二进制值)添加到后 8 字节模 2exp(64)。我怎么能那样做?

我找到了一个解决方案。但是做这样的事情肯定不好(看代码)。尽管如此,将结果保存在字符数组中会很好。

void init(const unsigned char *k) {
uint64_t *kp = k;
uint64_t sum = (*kp + *(kp+1)) % pow(2,64)
}

感谢帮助

最佳答案

您不需要 % pow(2,64),事实上它会引入错误,因为它将结果与 double 相互转换。 uint64_t 类型的算术已经对 2^64 取模。

将 8 个字节读取为 uint64_t 的问题基本上是关于您希望它在哪些 C 实现上工作,以及您的 char 数组中 8 个字节的格式。

如果您知道 char 数组中的 8 个字节与您的系统具有相同的字节序(也就是说,如果您的系统是大端,则最高有效字节在前,如果您的系统是小端,则最高有效字节在后) ),那么你正在做的事情可能没问题。但是,如果您的系统上对 uint64_t 有对齐限制,则无论谁提供缓冲区都必须确保它正确对齐。

如果数据来自某个文件或来自互联网,则字节顺序可能与系统不匹配,并且可能无法正确对齐。

如果 8 个字节是小端,则此代码在大端系统上会失败,因此如果您希望代码可移植,则必须采取其他措施。有系统一个unit64_t不占8个字节,连memcpy都不行。您的函数规范可能意味着它完全不适用于此类系统,但在某些情况下,将 8 个字符的数组转换为 uint64_t 确实有意义,无论 CHAR_BIT 实际上是否大于 8 .

对于可靠的基本解决方案:一次读取一个字节并将各部分相加(左移 0,然后 8,依此类推)。如果您不喜欢它的外观,请假设您需要支持哪些平台并进行优化。

无论您如何读取数据,如果您希望将结果返回到 char 数组中,则反转该过程 - 对于您的代码,*((uint64_t*)output_buffer) = kp[0] + kp[ 1];.

关于C:使用 char 数组作为 8 字节 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3875847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com