我有一个设备模拟器,它接受来自socket的文本数据.Below代码正常工作,直到我从0x00 to 0x7F
发送到Ascii限制(0到127)。
当我尝试发送超出Ascii限制(如0x80,0x81)时会出现问题。它发送到仿真器0x3F('?')并改变命令的全部含义。因为它无法理解这一点。
那么发送数据超出Ascii限制的可能解决方案
发送数据代码:
//string data = textBox1.Text;
string d1 = ConvertHex("35"); //getting exact byte in socket
byte[] buffer = Encoding.ASCII.GetBytes(d1);
clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();
ConverHex功能:
public static string ConvertHex(String hexString)
{
try
{
string ascii = string.Empty;
for (int i = 0; i < hexString.Length; i += 2)
{
String hs = string.Empty;
hs = hexString.Substring(i, 2);
uint decval = System.Convert.ToUInt32(hs, 16);
char character = System.Convert.ToChar(decval);
ascii += character;
}
return ascii;
}
catch (Exception ex) { Console.WriteLine(ex.Message); }
return string.Empty;
}
答案 0 :(得分:3)
但是当我发送的内容超过
79
时,我会在模拟器中获得3F
。
7F
实际上是上限。因为它是十进制的127
,是ASCII编码支持的最高代码点。代码点高于解码为问号的代码点,代码点为63
或3F
十六进制。
那是因为您正在使用文本来传输二进制数据。不要那样做。有关“十六进制字符串到字节数组”的正确实现,请参阅How can I convert a hex string to a byte array?。