C# 如何发送和接收1024位?

C# 如何发送和接收1024位?,c#,C#,我正在使用C windows窗体设计一个接口,我想使用串行端口发送和接收1024位,我发送的数字是十六进制的,所以我做的是下一步: private void button2_Click(object sender, EventArgs e) { int i; int a = 0; byte[] mychar; mychar = new byte[128]; string M = textBox1.Text; for (i = 0; i <

我正在使用C windows窗体设计一个接口,我想使用串行端口发送和接收1024位,我发送的数字是十六进制的,所以我做的是下一步:

private void button2_Click(object sender, EventArgs e)
{
    int i;
    int a = 0;
    byte[] mychar;
    mychar = new byte[128];
    string M = textBox1.Text;

    for (i = 0; i < 127; i++ )
    {
        mychar[i] = Convert.ToByte((M.Substring(a,2)),16);
        a += 2;
    }
    serialPort1.Write(mychar,0,127);
}
总结一下我的问题: 1-发送数据的代码是否正确? 2-如何强制文本框将输出显示为十六进制

多谢各位

更新这是我的完整代码,也许你会理解我的问题:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
        string RXstring = "";
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            try
            {
                RXstring = serialPort1.ReadExisting();
                this.Invoke(new EventHandler(displaytext));
            }
            catch (System.TimeoutException)
            {

            }
        }
            private void displaytext(object s, EventArgs e)
        {

            textBox5.Clear();
             textBox5.AppendText(RXstring);
             //int value = Convert.ToInt32(RXstring, 16);
             //string stringValue = Char.ConvertFromUtf32(value);
             //textBox4.AppendText(stringValue);
        }

            private void pictureBox2_Click(object sender, EventArgs e)
            {
                serialPort1.Close();
                Form1 myForm = new Form1();
                this.Close();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                try
                {
                    if (!serialPort1.IsOpen)
                    {

                        serialPort1.Open();
                        button1.Enabled = false;
                    }
                    else
                    {
                        MessageBox.Show("Port is Open by other party!");

                    }


                }
                catch (UnauthorizedAccessException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

            private void Form3_FormClosed(object sender, FormClosedEventArgs e)
            {
                serialPort1.Close();
            }

            private void button3_Click(object sender, EventArgs e)
            {
                textBox1.Text = "0";
                textBox2.Text = "0";
                textBox3.Text = "0";
                textBox4.Text = "0";
                textBox5.Text = "";
            }

            private void button2_Click(object sender, EventArgs e)
            {
                int i;
                int a=0;
                byte[] mychar;
                mychar = new byte[128];
                string M = textBox1.Text;

                for (i = 0; i < 127; i++ ) {
                mychar[i] = Convert.ToByte((M.Substring(a,2)),16);
                a += 2;
                }
                serialPort1.Write(mychar,0,127);
            }

        }
    }
当我从textbox1发送数据时,我希望显示的数据与在textbox5中发送的数据完全相同,您能帮我吗?

这显示了如何在字节和十六进制字符串之间转换:


我刚刚在代码中添加了以下内容:

string hex = "";
             foreach (char c in RXstring)
             {
                 int tmp = c;
                 hex += String.Format("{0:X2}", (uint)System.Convert.ToUInt32(tmp.ToString()));
             }
             textBox5.AppendText(hex);

无论如何谢谢你:

什么是C windows论坛@BinkanSalaryman我很确定它的wpfy你不能强迫一个文本框以文本以外的任何形式显示文本。但是你当然可以做相反的事情,比如用格式字符串02X将缓冲区中的每个字节转换成十六进制。作为一个不得不不时处理类似代码的人:我要你做的第一件事就是重命名你的控件-请使用convert.ToByteM.Substringa,2,16表示他已经有一个文本框,其中包含十六进制表示的二进制数据。因此,他不需要考虑在这段代码中的编码。谢谢你的回答,我是初学者,所以我不确定这是否是我的问题解决方案,我的问题是什么,我收到的在我的文本BOX5中被转换成它的ASCII表示,据我所知,这是TeXBox的标准,我的教练告诉我有一些转换可以完成这项工作,但是,我找不到任何转换,你能帮我解决这个问题吗?非常感谢。您的文本框中有什么内容?它是一根绳子吗?我不知道您的环境,但是如果您编写的转换方法已经存在,您应该再次询问您的讲师在哪里可以找到它。您好,我已经发布了我的完整代码+界面是什么样子的,您能看一下吗,我将非常感谢从代码中我无法知道serialPort1.ReadExisting是做什么的。如果它返回一个字符串,我应该可以很好地处理控件的AppendText。除此之外,我从来没有处理过串行端口编程。。。
class Program {
    static void Main(string[] args) {
        byte[] bytes = FromHexString("0123456789ABCEF");
        string text = ToHexString(bytes);
        Console.Write(text);
        Console.ReadKey(true);
    }

    static byte[] FromHexString(string hexString) {
        byte[] result;
        //determine length and handle case of uneven digit count
        int length = hexString.Length / 2;
        bool even = length * 2 == hexString.Length;
        if(!even) {
            length++;
        }
        //allocate memory
        result = new byte[length];

        int offset;
        if(even) {
            offset = 0;
        } else {
            //convert first digit, if digit count is uneven 
            result[0] = Convert.ToByte(hexString[0].ToString(), 16);
            offset = 1;
        }
        for(int i = offset; i < result.Length; i++) {
            //convert digit to byte
            result[i] = Convert.ToByte((hexString.Substring(i * 2 - offset, 2)), 16);
        }
        return result;
    }

    static string ToHexString(byte[] bytes, bool upperCase = true) {
        string format = upperCase ? "X" : "x";
        //initialize result with double capacity as a byte in hex notation occupies 2 chars
        StringBuilder result = new StringBuilder(bytes.Length * 2);
        foreach(var @byte in bytes) {
            result.Append(@byte.ToString(format));
        }
        return result.ToString();
    }
}
string hex = "";
             foreach (char c in RXstring)
             {
                 int tmp = c;
                 hex += String.Format("{0:X2}", (uint)System.Convert.ToUInt32(tmp.ToString()));
             }
             textBox5.AppendText(hex);