将二进制数字转换为ascii字符

本文关键字:ascii 字符 转换 二进制数字 | 更新日期: 2023-09-27 18:27:44

我正在从设备读取信息,它以整数格式向我返回数据,我需要使用C#将其转换为ASCII字符。

以下是我必须转换的数据示例。我从我的设备收到了26990的整数值,我需要将其转换为ASCII。我只是碰巧知道,对于这个值,期望的结果是"ni"。

我知道整数值26990在十六进制中等于696e,在二进制中等于110100101101110,但我想知道如何进行转换,因为我自己无法计算。

有人能帮忙吗?

非常感谢,

Karl

将二进制数字转换为ascii字符

int i = 26990;
char c1 = (char)(i & 0xff);
char c2 = (char)(i >> 8);
Console.WriteLine("{0}{1}", c1, c2);

使用BitConverterEncoding执行转换:

class Program
{
    public static void Main()
    {
        int d = 26990;
        byte[] bytes = BitConverter.GetBytes(d);
        string s = System.Text.Encoding.ASCII.GetString(bytes);
        // note that s will contain extra NULLs here so..
        s = s.TrimEnd(''0');
    }
}

如果设备正在发送字节,您可以使用类似的东西:

byte[] bytes = new byte[] { 0x69, 0x6e };
string text = System.Text.Encoding.ASCII.GetString(bytes);

否则,如果设备正在发送整数,你可以使用这样的东西:

byte[] bytes = BitConverter.GetBytes(26990);
string text = System.Text.Encoding.ASCII.GetString(bytes, 0, 2);

在任何一种情况下,执行之后,text都将包含"ni"。请注意,在后者中,您可能需要处理endianness问题。

进一步参考:

  • Encoding
  • Encoding.ASCII属性
  • Encoding.GetString方法过载