C# 无法将字符串转换为十六进制表示形式

C# 无法将字符串转换为十六进制表示形式,c#,C#,我使用串行端口接收数据,并使用以下代码将字符串转换为十六进制表示形式,并在richtextbox5中显示: string hex = ""; foreach (char c in RXstring) { uint tmp = c; hex += String.Format("{0:X2}", (uint)System.Convert.ToInt16(tmp.ToString())) ;

我使用串行端口接收数据,并使用以下代码将字符串转换为十六进制表示形式,并在richtextbox5中显示:

string hex = "";
            foreach (char c in RXstring)
            {
                uint tmp = c;
                hex += String.Format("{0:X2}", (uint)System.Convert.ToInt16(tmp.ToString())) ;
            }

            richTextBox5.AppendText(hex + "   <= Hex");
其中RXstring是存储串行端口数据的地方。 问题是: 当我发送像127decimal=>011111Binary=>7Fhex这样的数据时,它被正确地转换,而当我发送像191或167这样的数据时,它们的最高有效位都是1,它们都是8位,输出是3F,尽管其他位,任何8位以1开头的表示都是3F,我的代码怎么了?
你能帮忙吗,谢谢

这是一个使用字节的示例,它似乎可以按照您的需要工作:

        string hex = "";
        byte[] RXstring = { 0xFF, 0xCF, 0xB8, 167,191 };
        foreach (byte c in RXstring)
        {
            uint tmp = c;
            hex += String.Format("{0:X2}", (uint)System.Convert.ToInt16(tmp.ToString()));
        }

        System.Console.WriteLine("{0}   <= Hex", hex);

我只添加了serialPort1.Encoding=Encoding.Default;连接到我的串行端口,工作正常

您应该将串行端口上的内容视为原始字节,而不是字符串。您应该确保使用正确的编码!显示您的发送代码和更多的接收代码。您确定字符是读取原始数据的正确数据格式吗?我会用字节来代替。它被设计为读取UTF-16字符,不幸的是,它没有像我预期的那样工作,因为我从串行端口读取RXstring必须是字符串,否则,我不能使用:RXstring=serialPort1.ReadExisting;