读取UDP数据包,需要将单个字节转换为序数值(int)。或者一个 4 字节整数值到 int。但我感兴趣的值是 0、1 或 2(有意义的单字节),因此实际上不需要读取所有 4 个字节。private async void Button1_ClickAsync(object sender, EventArgs e){ try { using (var TheudpClient = new UdpClient(2237)) { TheudpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); var receivedResults = await TheudpClient.ReceiveAsync(); MsgText = Encoding.ASCII.GetString(receivedResults.Buffer); MsgTypeStr = MsgText.Substring(11,1); MsgTypeInt = (int)MsgTypeStr; // this line blows up... // MsgTypeInt = int.Parse(MsgTypeStr, System.Globalization.NumberStyles.HexNumber); // this blows up // MsgTypeInt = Int32.Parse(MsgTypeStr); // this blows up richTextBox1.Text = "\nLength: " + MsgText.Length + " Type " + MsgTypeInt.ToString(); richTextBox1.Text = "\nReceived data: " + MsgText; } } catch(Exception ex) { richTextBox1.Text += "\nException: " + ex.Message.ToString(); }}错误消息是“输入字符串的格式不正确。”我相信问题是试图将字符串字节转换为整数。在 Delphi 中,使用 Ord 函数很容易。我可能需要从 char 转换为 int。只是不知道如何从字符串中获取字符。我是 C# 新手。感谢您的任何建议。
2 回答
临摹微笑
TA贡献1982条经验 获得超2个赞
当您将字符串转换为 int 时,它会尝试读取该字符串,就像它是格式化数字一样。但您想要做的是转换字符串中的第一个字节,如下所示:
MsgTypeInt = (int)(MsgText[11]);
注意事项:还没有编译或尝试过这个,也没有研究从 Encoding.ASCII.GetString 返回每个字符有多少字节。
至尊宝的传说
TA贡献1789条经验 获得超10个赞
这是将字节转换为整数的简单方法。
class Example {
public static void main(String args[]) {
byte b = 100;
int x;
x = b; // automatic conversion
System.out.println(b+" "+x);
}
}
- 2 回答
- 0 关注
- 124 浏览
添加回答
举报
0/150
提交
取消