gpt4 book ai didi

c++ - 如何将字节数组转换为 boost::multiprecision::uint128_t?

转载 作者:行者123 更新时间:2023-11-28 04:30:54 26 4
gpt4 key购买 nike

如果我有:

字符缓冲区[16];

如何将其原始字节转换为:

boost::multiprecision::uint128_t ?

我尝试进行标准的 C 风格转换:

uint128_t myInt = *(uint128_t*)buffer;

虽然它似乎不能正常工作。还尝试使用 dynamic_cast

我找到了这个页面:https://www.boost.org/doc/libs/1_56_0/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html

关于如何进行对话,但似乎没有涵盖这一类的东西。有什么想法吗?

编辑:其中一条评论建议使用 memcpy(如果它类似于 GCC 的 128 位 uint)将字节复制到 uint128_t 中。如果按照我期望的方式完成,那似乎无法正常工作: memcpy() try我错过了什么吗?

最佳答案

我找到了一种基于 uint128_t 类型的动态特性来执行此操作的方法。它似乎并不总是将所有 16 个字节用于数值。它仅在认为需要时才使用它们(这就是原始 memcpy() 不起作用的原因)。

所以诀窍是强制它认为需要所有 16 个字节,然后 memcpy() 中的数据。我们可以通过设置初始值 -1(或所有 Fs)来做到这一点:

boost::multiprecision::uint128_t getUintFromBuffer(const std::vector<unsigned char> &buf)
{
boost::multiprecision::uint128_t retU = -1;
memset(&retU, 0, 16);
memcpy(&retU, buf.data(), std::min(buf.size(), (size_t)16));
return retU;
}

int main()
{
std::vector<unsigned char> buf;
buf.resize(16);
buf[0] = 0xaa;
buf[15] = 0xff;

std::cout << std::hex << getUintFromBuffer(buf) << std::endl;

return EXIT_SUCCESS;
}

运行这个例子打印:FF0000000000000000000000000000AA

这就是我要找的:)

关于c++ - 如何将字节数组转换为 boost::multiprecision::uint128_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52958235/

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