gpt4 book ai didi

c++ - 将 BYTE 数组转换为 unsigned long long int

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:24 24 4
gpt4 key购买 nike

我正在尝试将 BYTE 数组转换为等效的 unsigned long long int 值,但我的编码没有按预期工作。请帮助修复它或建议替代方法。

额外信息:这 4 个字节组合成一个十六进制数,输出一个等效的十进制数。假设一个给定的 byteArray= {0x00, 0xa8, 0x4f, 0x00},十六进制数是 00a84f00,它等效的十进制数是 11030272。

#include <iostream>
#include <string>

typedef unsigned char BYTE;

int main(int argc, char *argv[])
{
BYTE byteArray[4] = { 0x00, 0x08, 0x00, 0x00 };
std::string str(reinterpret_cast<char*>(&byteArray[0]), 4);
std::cout << str << std::endl;

unsigned long long ull = std::strtoull(str.c_str(), NULL, 0);
printf ("The decimal equivalents are: %llu", ull);


return EXIT_SUCCESS;
}

我得到以下输出:

The decimal equivalents are: 0

虽然预期的输出是:

The decimal equivalents are: 2048

最佳答案

当您调用 std::strtoull(str.c_str(), NULL, 0); 时,它提供的第一个参数相当于一个空字符串,作为字符串本质上是一个以 null 结尾的字符序列。

其次,std::strtoull()不是用字节序列来转换的,它是用字符串的字面意义来转换的。即,您将通过 std::strtoull("2048", NULL, 10) 获得 2048

另外需要注意的是 unsigned long long 是 64 位数据类型,而您的字节数组只提供 32 位。您需要用零填充其他 32 个字节才能得到正确的结果。我使用直接赋值,但您也可以在此处使用 std::memset()

你要做的是:

ull = 0ULL;
std::memcpy(&ull, byteArray, 4);

鉴于您的平台有 little-endian ,结果应该是 2048

关于c++ - 将 BYTE 数组转换为 unsigned long long int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48583728/

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