【发布时间】:2018-02-02 13:28:06
【问题描述】:
我正在尝试将 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
【问题讨论】:
-
使用
memcpy()。 -
等等,什么?您如何期望一个充满特殊字符的字符串可以转换为
2048?至少使用{0x32,0x30,0x34,0x38}。 -
还可以考虑使用 C++ 变体(C++11 及更高版本)
标签: c++