逗号分隔的十六进制字符串数组,控制字符为字节数组

时间:2016-11-19 12:34:25

标签: arrays string sockets hex

我猜它很简单,但是浪费了我很多时间,但仍然没有运气!

以下工作非常顺利 -

sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
byte[] bytes=new byte[]{0x7F, 0x00, 0x00, 0x21, 0x09, 0x7F, 0x30, 0x00, 0x15, 0x02, 0x02, 0x00, 0xEE, 0x28, 0xCB, 0x87 };
sck.Connect("192.168.1.100", 8008);
sck.Send(bytes);
sck.Close();

并且,如果我将这些十六进制字符串数组保存在文本框中,如 -

textbox1.Text="0x7F, 0x00, 0x00, 0x21, 0x09, 0x7F, 0x30, 0x00, 0x15, 0x02, 0x02, 0x00, 0xEE, 0x28, 0xCB, 0x87";

但是,我需要将textbox1.Text字符串用于同一个任务;像 -

sck.Send(textbox1.Text);

我尝试了很多,但无法提出任何解决方案。请指导我......

实际上,我会将十六进制字符串作为字符串保存在数据库中,稍后将在我的程序中检索。

2 个答案:

答案 0 :(得分:0)

首先,stringbyte array之间的区别是:

"0x03" as a string is of 4 bytes
 0x03 as an entry in a byte array is of 1 byte

所以你需要做的是Delimit ,处的字符串并分隔不同的十六进制字符串,将它们存储在字符串数组或任何其他数据结构中。

然后你必须使用某个函数将这些字符串转换为单个字节,或者你可以创建自己的方法,其中一个可以找到here

将这些bytes存储在byte array中,您就可以了。

答案 1 :(得分:0)

我是通过以下方式做到的:

txtHexString.Text="0x11, 0x01, 0x49, 0x4D, 0x41, 0x47, 0x45, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x53, 0x75, 0x6D, 0x6D, 0x61, 0x72, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00";

string[] namesArray =  txtHexString.Text.Split(',');
byte[] abc= new byte [namesArray.Length];

for (int i = 0; i <= namesArray.Length - 1; i = i + 1)
        {
            abc[i] = Convert.ToByte(namesArray[i].Replace(" ", ""), 16);
        }

这里,abc是所需的字节数组。