gpt4 book ai didi

c - 如何使用2个指针形成一个64位数字?

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

假设我有两个指针

uint64_t* ptr1;
uint64_t* ptr2;

我必须形成一个 var 值,以便从 ptr1 中获取 6 个字节,从 ptr2 中获取 2 个字节,目前 ptr1 已经消耗了它的初始 2 个字节,现在剩下要处理的剩余字节是 6 个字节。

我是这样写的

uint64_t value = (uint64_t)((*ptr1) >> 16);\
value = (uint64_t)(value << 16 | (*ptr2 & 0x000000000000ffff));\

理想情况下,其掩码应为 0xffff000000000000,但它不起作用。(用于处理目的)。我应该如何进行,我在这里做错了什么?在我看来应该是

value = (uint64_t)((*ptr1 & ~0x000000000000ffff)  << 16 | (*ptr2 & 0xffff000000000000));

编辑:这里的 ptr1 指向 (uint8_t*)ptr1 +2,即 ptr1 之后的 2 个字节

最佳答案

先写mask

#define mask 0xFFFFFFFFFFFF 

ptr1中提取6个字节并存储

const uint64_t first_six = *ptr1 & mask;

ptr2中提取2个字节并存储

const uint16_t last_two = *ptr2 & 0xFFFFull;

最后把它们放在一起

uint64_t value = (first_six << 16) | last_two;

在单个表达式中

uint64_t value = ( (*ptr1 & mask) << 16 ) | (*ptr2 & 0xFFFFull);

I also wanted to know if endianness matters during masking?

字节顺序在这种情况下并不重要。

关于c - 如何使用2个指针形成一个64位数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30805189/

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