2

我正在尝试将 int 值转换为 16 位无符号字符类型 (USHORT)。在一个示例中,41104 是 ushort 中的 A909,但在 C# 中我尝试使用代码示例作为(在 MSDN 文章BitConverter.GetBytes Yöntem (UInt16)的帮助下):

byte[] bytes = BitConverter.GetBytes(41104);
string bytes = BitConverter.ToString(byteArray);
//It returns "90-A0"

如何将 A909 值作为 41104 的 ushort?

4

2 回答 2

2

实际上正确的(=十六进制)值是 A090。我不管它是否是 ushort,你想要的是显示十六进制等价物。

您提供的代码片段已经做到了这一点。一个字节是“A0”,另一个是“90”。你只需要正确的顺序。

另一种方法是让 .NET 完成这项工作

String.Format("{0:X}", 41104);

如您所见,这并不是真正的数据转换,而是一种不同的显示方式。

于 2010-09-02T07:47:26.080 回答
1

您需要重新排序字节:

byte[] bytes = BitConverter.GetBytes(41104);
if (BitConverter.IsLittleEndian)
{    List<byte> tmp = new List<byte>();
     tmp.AddRange(bytes);
     tmp.Reverse();
     bytes = tmp.ToArray();
}
于 2010-09-02T07:59:11.653 回答