C++ 将C+中的无符号字符(字节)数组转换为无符号短字符+;
我有C++ 将C+中的无符号字符(字节)数组转换为无符号短字符+;,c++,arrays,unsigned,unsigned-char,C++,Arrays,Unsigned,Unsigned Char,我有array^byteArray,我需要提取小尾端序列中的字节,以生成无符号的short和int。我已经尝试了以下我能想到的每一个组合,所以我请求帮助 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] +
array^byteArray
,我需要提取小尾端序列中的字节,以生成无符号的short和int。我已经尝试了以下我能想到的每一个组合,所以我请求帮助
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。较高的字节不受影响
我认为这是一个符号错误,但我似乎无法修复它。从两个8位整数生成16位整数的正确方法是
value=static\u cast(hibyte)从两个8位整数生成16位整数的正确方法是value=static\u cast(hibyte)int y=byteArray[I];byteArray[I+1]int y=byteArray[i]| byteArray[i+1]您想这样做吗
int x = UInt32(byteArray[i]) | (UInt32(byteArray[i + 1]) << 8);
int x=UInt32(byteArray[i])|(UInt32(byteArray[i+1])您想这样做吗
int x = UInt32(byteArray[i]) | (UInt32(byteArray[i + 1]) << 8);
int x=UInt32(byteArray[i])|(UInt32(byteArray[i+1])您必须将第二个字节乘以0x0100
,而不是0x00ff
这就像在十进制系统中,乘以10,而不是9。必须将第二个字节乘以0x0100
,而不是0x00ff
这就像在十进制系统中,用10乘以10,而不是9。您使用的是托管代码。Endian ness是框架知道的一个实现细节:
array<Byte>^ arr = gcnew array<Byte> { 1, 2, 3, 4 };
int value = BitConverter::ToInt16(arr, 1);
System::Diagnostics::Debug::Assert(value == 0x302);
array^arr=gcnewarray{1,2,3,4};
int值=位转换器::ToInt16(arr,1);
系统::诊断::调试::断言(值==0x302);
框架的假设是否正确取决于数据来自何处。您使用的是托管代码。Endian ness是框架知道的一个实现细节:
array<Byte>^ arr = gcnew array<Byte> { 1, 2, 3, 4 };
int value = BitConverter::ToInt16(arr, 1);
System::Diagnostics::Debug::Assert(value == 0x302);
array^arr=gcnewarray{1,2,3,4};
int值=位转换器::ToInt16(arr,1);
系统::诊断::调试::断言(值==0x302);
框架的假设是否正确取决于数据来自何处。即使如此,也不能将字节0x50转换为0x0b。即使如此,也不能将字节0x50转换为0x0b。您还应该将hibyte
转换为16位数据类型,否则,如果是8位数据类型,左移位将变为将其转换为0。您还应将hibyte
转换为16位数据类型,否则,如果它是8位数据类型,则左移位将其转换为0。您正在尝试执行移位。乘法可以模拟移位,但您正在乘以255,而255不会模拟移位。您正在尝试执行移位。乘法可以模拟shift,但您将乘以255,这不会模拟移位。在MSDN帮助页面上,我找到了指示数组01-02-03-04的ToInt16示例,该数组的产量为ToInt16(arr,1)==0x20。除非我遗漏了什么。感谢您提供的快速专业知识。在MSDN帮助页面上,我找到了指示数组01-02-03-04产量为ToInt16(arr,1)的ToInt16示例==0x20。除非我错过了什么。感谢您提供的快速专业知识。