【问题标题】:C# Socket send string conversionC# Socket 发送字符串转换
【发布时间】:2012-03-24 13:56:59
【问题描述】:

我对此很陌生,所以有些困惑。我想使用 Socket 类发送转换为十六进制的“OPTIONS”。这就是我到目前为止所拥有的。我已将“OPTIONS”转换为十六进制并想发送“4F5054494F4E53”。

    private void button2_Click(object sender, EventArgs e)
    {
        var message = Encoding.ASCII.GetBytes("4F5054494F4E53");
        client.BeginSend(message, 0, message.Length, SocketFlags.None,
                     new AsyncCallback(SendData), client);

    }

但是当我在 BeginSend 上设置断点时,消息字节数组包含“52705348”而不是“4F5054”等。我该如何处理?谢谢

【问题讨论】:

    标签: c# string sockets hex


    【解决方案1】:

    在 ASCII 中 0x52= char 4, 0x70 = char F 等等, 只为获得您的预期结果:

    var message = Encoding.ASCII.GetBytes("OPTIONS");
    

    验证:

            byte[] verifyHex = new byte[] { 0x4F, 0x50,  0x54, 0x49, 0x4F, 0x4E, 0x53};
            byte[] verifyDec = new byte[] { 79, 80, 84, 73, 79, 78, 83};
    
            var message = Encoding.ASCII.GetBytes("OPTIONS");
    
            if (message.Where((t, i) => t != verifyDec[i] || t != verifyHex[i]).Any())
            {
                MessageBox.Show("Not equal.");
            }
            else
            {
                MessageBox.Show("All three representations are equal.");
            }
    

    【讨论】:

    • 我刚试过,数组包含 79808473797883 但我需要它具有上述值。
    • @ChaosPandion 我不确定这对我有什么帮助,因为我必须再次将其转换为字节数组,我仍然会遇到同样的问题。
    • @user1224096: 79 十进制 = 0x4F 十六进制 = ASCII O, 80 = 0x50 = P, 84 = 0x54 = T 等 Google ASCII 表
    • @Roger Stewart 我明白了,但我不明白我应该如何正确转换它。我不想自己硬编码字节,那将是乏味的工作。我只是想发送“4F5054494F4E53”,即“OPTIONS”转换为十六进制。
    • @user1224096:您说您在单步执行时会看到 79808473797883。 79808473797883 是调试器中的十进制表示。调试时右键单击“Autos”或“Locals”窗口,然后选择“Hexadecimal display”。这将显示数组包含 4F5054494F4E53。
    猜你喜欢
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 2014-07-14
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多