2016-11-19 34 views
0

我想它非常簡單,但它浪費了我很多時間,但仍然沒有運氣!逗號分隔的十六進制字符串數組與字符數組的控制字符

以下工作非常nicely-

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的。相同任務的文本字符串;像 -

sck.Send(textbox1.Text); 

我試了很多,但不能拿出任何解決方案。請指導我...

實際上,我會將十六進制字符串保存在數據庫中作爲字符串,稍後將在我的程序中檢索。

+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,你很好去。

+0

嗨Mohit,謝謝你這麼好的主意。我也認爲這樣做。雖然我在尋找是否有任何非常簡單的方法或內建函數。 –

+0

是的,有一些內置的功能,但它們有一些限制,這就是爲什麼我建議你開發自己的功能或遵循上面提到的鏈接。 –

+0

我做到了!謝謝Mohit。 –

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是所需的字節數組。

相關問題