【问题标题】:How to convert network byte to int?如何将网络字节转换为int?
【发布时间】:2019-08-09 00:45:46
【问题描述】:

读取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。只是不知道如何从字符串中获取字符。

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

【问题讨论】:

  • 您询问如何将“网络字节”转换为“int”,但随后您演示了将收到的内容转换为字符串。那么数据是文本格式(即人类可读)还是二进制格式?如果是后者,那么您不应该将其转换为字符串。
  • 数据被接收并放入一个字符串中。其中一些是可读的——那是ASCII。这是接收到的数据包的前 16 个字节的十六进制表示,使用 WireShark 读取。我需要对第 12 个字节进行操作,以确定消息的类型。 ab bc db da 00 00 00 02 00 00 00 01 00 00 00 06。在这种情况下,12字节是01。所以我需要将该字节转换为int = 1,以进行进一步的评估和处理。
  • This is why you might not want to convert it to string,如果您是,请不要在发送机器上将其作为字符串处理。基本上,如果一个值大约为 0x7F(ASCII 范围的末尾),您将得到 0x3F。

标签: c# ord


【解决方案1】:

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

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

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

【讨论】:

  • 我同意@john,您应该考虑改用 (int)(received.Buffer[11]))。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    相关资源
    最近更新 更多