将字节数组转换为 C++ 中的十进制数
Converting a byte array to a decimal number in C++
我正在尝试使用 Java 将纬度和经度转换为字节数组,然后使用 C++ 将字节数组转换为双精度数组。到目前为止,这就是我正在做的事情:
我有一个{0x40,0x4a, 0x62, 0x65, 0x27, 0xa2, 0x05, 0x79}
字节数组,它在 JAVA 中给出了 52.768712。
我正在尝试使用以下命令在C++中做同样的事情:
unsigned char data[8] = { 0x40,0x4a, 0x62, 0x65, 0x27, 0xa2, 0x05, 0x79};
double sample;
double conversion;
copy(data, data+ sizeof(double), reinterpret_cast<char*>(&sample));
memcpy(&conversion, data, sizeof(double));
cout <<fixed << sample << endl;
cout <<fixed << conversion << endl;
但这输出
93624845218206212768416858147698568034806357864636725490778543828533000856049725637297881892477906693728822997596617150540736669122257619339758101303551253860040255473731364930515446918886205365571056786975140751691636070476504921373224351498841838203471739594278994672877568.000000
我在这里做错了什么?
Endianness。Java是大端的,而C++是依赖于平台的。
这在基于英特尔的Windows PC(小端序(上对我有用:
#include <iostream>
#include <cstring>
#include <algorithm>
int main()
{
unsigned char data[8] = { 0x40,0x4a, 0x62, 0x65, 0x27, 0xa2, 0x05, 0x79};
double sample;
double conversion;
std::reverse(std::begin(data), std::end(data)); // Reverse byte order here
std::copy(data, data+ sizeof(double), reinterpret_cast<char*>(&sample));
std::memcpy(&conversion, data, sizeof(double));
std::cout << std::fixed << sample << std::endl;
std::cout << std::fixed << conversion << std::endl;
}
输出:
52.768712
52.768712
请注意,这本质上是不可移植的,因为字节序、double
大小和浮点表示不是由C++语言标准定义的。
相关文章:
- visual在c++中将十进制数转换为二进制数
- C++从二进制转换为十进制数
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 将分数转换为十进制数并对其进行排序
- 使用标准库计算字符串中的十进制数
- (第 1 位 + 第 2 位)以十进制数表示
- 如何通过输入十进制数打印UTF-8符号?
- 如何使用链表将负十进制数转换为二进制?
- 二进制反转为十进制数
- 以C++格式将十六进制字符串转换为十进制数
- 如何在C++中使用setiosflags打印出十进制数作为八进制数
- 将字节数组转换为 C++ 中的十进制数
- 为什么如果(!(cin >> int)) 在第一次迭代中接受十进制数,但不接受其他十进制数?
- 在 c++ 中使用 setfill() 以特定格式打印十进制数
- 您能否给我一个 16 位(或更多)十进制数,该十进制数仅在第 15 位正确转换为双精度浮点圆
- 使用堆栈将十进制数转换为二进制数
- 如何确定十进制数的完美幂?
- 使用 for 循环更改二进制数>十进制数
- 将浮点数转换为字符串,并指定精度和十进制数字数?
- 我想显示序列 ftom 16 到 31 十进制数,但它没有显示:谁能在这里帮助我