C# 如何发送和接收1024位?
我正在使用C windows窗体设计一个接口,我想使用串行端口发送和接收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 <
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);