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

时间:2019-08-09 00:45:46

标签: c# ord

读取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();
     }
}

错误消息是“输入字符串的格式不正确。”

我认为问题是试图将字符串字节转换为int。在Delphi中,使用Ord函数很容易。我可能需要从char转换为int。只是不知道如何从字符串获取char。

我是C#的新手。感谢您的任何建议。

2 个答案:

答案 0 :(得分:0)

将字符串强制转换为int时,它将尝试读取该字符串,就好像它是带格式的数字一样。但是,您要做的是转换字符串中的第一个字节,如下所示:

MsgTypeInt = (int)(MsgText[11]);

注意事项:尚未编译或尝试过此操作,也未调查过Encoding.ASCII.GetString每个字符返回多少字节。

答案 1 :(得分:0)

这是将字节转换为整数的简单方法。

class Example {
public static void main(String args[]) {
    byte b = 100;
    int x;
    x = b; // automatic conversion
    System.out.println(b+" "+x);
    }
}
相关问题