我有 array^ byteArray
并且我需要提取 Little Endian 序列中的字节以生成无符号短整型和整数。我已经尝试了以下我能想到的所有组合,所以我正在寻求帮助。
int x = UInt32(byteArray[i]) + (UInt32)(0x00ff) * UInt32(byteArray[i + 1]);
int x = UInt32(byteArray[i]) + UInt32(0x00ff) * UInt32(byteArray[i + 1]);
int x = byteArray[i] + 0x00ff * byteArray[i + 1];
问题是最低有效字节(在 i+1)我知道它是 0x50 但生成的 short/int 报告低字节为 0x0b。高字节不受影响。
我认为这是一个符号错误,但我似乎无法修复它。
最佳答案
您正在使用托管代码。 Endian-ness 是框架知道的实现细节:
array<Byte>^ arr = gcnew array<Byte> { 1, 2, 3, 4 };
int value = BitConverter::ToInt16(arr, 1);
System::Diagnostics::Debug::Assert(value == 0x302);
框架的假设是否正确取决于数据的来源。
关于c++ - 在 C++ 中将 unsigned char (byte) 数组转换为 unsigned short,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7542391/