首页 > 解决方案 > 如何将 ushorts 转换为字符串?

问题描述

下面的代码工作得很好。最后,变量 keyFileName 正确包含“K1_1”。但是必须有更好的方法来获取字符串。

ushort us1 = 0x4B31;
ushort us2 = 0x2E31;
string keyFileName = "";
keyFileName = Convert.ToString((char)(us1 >> 8)) + 
              Convert.ToString((char)(us1 & 0xFF)) + 
              Convert.ToString((char)(us2 >> 8)) + 
              Convert.ToString((char)(us2 & 0xFF));

难道没有比这更好的办法了吗?

标签: c#

解决方案


我们可以BitConverter.GetBytes()用来获取ushort值的字节。问题是字节序与我们转换为字符串所需的相反。

虽然我们仍然可以实现转换,但我认为您的原始解决方案更优雅。为了提供它,这是我提出的解决方案:

ushort us1 = 0x4B31;
ushort us2 = 0x2E31;
string keyFileName = "";
byte[] bytes = BitConverter.GetBytes(us1).Reverse()
                .Concat(BitConverter.GetBytes(us2).Reverse())
                .ToArray();
keyFileName = System.Text.Encoding.ASCII.GetString(bytes);

当然,我们可以将整个东西以相反的顺序连接在一起,然后反转整个结果字节集合,而不是反转单个短裤的字节。这应该会使这部分的阅读变得更容易一些:

byte[] bytes = BitConverter.GetBytes(us2)
                .Concat(BitConverter.GetBytes(us1))
                .Reverse()
                .ToArray();

推荐阅读