猿问

如何将网络字节转换为int?

读取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# 新手。感谢您的任何建议。


牛魔王的故事
浏览 125回答 2
2回答

临摹微笑

当您将字符串转换为 int 时,它会尝试读取该字符串,就像它是格式化数字一样。但您想要做的是转换字符串中的第一个字节,如下所示:MsgTypeInt = (int)(MsgText[11]);注意事项:还没有编译或尝试过这个,也没有研究从 Encoding.ASCII.GetString 返回每个字符有多少字节。

至尊宝的传说

这是将字节转换为整数的简单方法。class Example {public static void main(String args[]) {    byte b = 100;    int x;    x = b; // automatic conversion    System.out.println(b+" "+x);    }}
随时随地看视频慕课网APP
我要回答