2013-01-16 260 views
0

我覺得我在回答這個問題的兩個步驟,但有些事情讓我感到困惑。我正在通過TCP/IP和byte []的方式進行一些通信。是byte []的byte.length()的最大大小還是實際大小?

所以我開始構建我的byte []數組,並且第三個字節需要byte []的長度。如果我這樣宣佈我的字節;

byte[] bytesToSend = new byte[119]; 

,然後與數據的前三個字節填充..

bytesToSend[0] = 0x40; 
bytesToSend[1] = 0x40; 
bytesToSend[2] = Encoding.ASCII.GetBytes(bytesToSend.Length.ToString())[0]; 

最後只是打印出來的第三字節,其中應含有的長度;

MessageBox.Show(BitConverter.ToString(bytesToSend)); 

我應該期待它返回119的字節大小還是隻是最大大小?目前它返回十六進制「0x31」,就我所知,它不等於119或3.這無疑是一些簡單的/基本的東西,我錯過了,但是有人能指出我正確的方向嗎?

+0

爲什麼在同一個'byte []'中放置'byte []'的長度是沒有意義的。它應該是單獨的和/或你應該總是使用相同大小的數組。 –

+1

呃,我需要將字節的長度放在同一個字節內,因爲這是第三方設備的協議?我可以給你他們的電話號碼,如果你想打電話給他們詢問? –

+0

@Rhhound顯然他在消息長度上需要的是什麼,而不是'byte []'的長度。 – Rotem

回答

6

看來你是不明確的,你實際上是在這裏做什麼:

bytesToSend[2] = Encoding.ASCII.GetBytes(bytesToSend.Length.ToString())[0]; 

我們把這個線下來:

bytesToSend.Length 

返回整數119

.ToString() 

返回字符串「119」

Encoding.ASCII.GetBytes("119") 

返回組成ascii字符串「119」的字符的字節數組。

[0] 

獲取只是該陣列中,這將等於0X31的第一個字節,因爲這是爲字符的ASCII代碼「1」。

此外,沒有這樣的事情作爲一個實際大小的c#Array。只有一個Length。如果你的意思是問他有多少元素包含非零字節,那是另一回事,但一旦你聲明

byte[] bytesToSend = new byte[119]; 

你得到119元的字節數組,這是Length將永遠是119,而不管你修改了多少個元素。

如果您需要使用更具動態尺寸的集合,請考慮使用List<byte>來代替。

+0

啊哈,我知道當我彈出[0]結束時,我做錯了什麼。但它消失了紅色,所以我認爲會出來好的!注意自我;不要這樣做。 –

+0

@Shane你的錯誤是將這個值轉換爲一個字符串開始。 – Rotem

+0

感謝您的幫助:)儘管如此,仍然不禁感到這聽起來像來自我父親的演講! aha –

1
bytesToSend.Length == 119 
bytesToSend.Length.ToString() == "119" 
Encoding.ASCII.GetBytes(bytesToSend.Length.ToString()) == {0x31,0x31,0x39} 
Encoding.ASCII.GetBytes(bytesToSend.Length.ToString())[0] == 0x31 
+2

除了代碼之外,還有一點文字會使這個問題成爲一個很好的答案... –

+0

我沒有看到這個代碼是如何保持在最輕微的狀態。爲什麼你甚至把它轉換成'string'。此外,還有很多方法可以獲得'119'長度,這仍然是正確的。爲什麼你在GetBytes中有一個布爾語句? –

5

bytesToSend.Length將是119。然而,而不是bytesToSend[2]存儲119,你

  • 將其轉換爲字符串,"119"
  • 該字符串轉換爲字符的ASCII表示字節數組,[49, 49, 57]
  • 考慮的是,第一個字節結果,490x31

您需要做的僅僅

bytesToSend[2] = (byte)bytesToSend.Length; 

儘管這將打破,如果你要發送超過255個字節,

0

此:

Encoding.ASCII.GetBytes(bytesToSend.Length.ToString())[0]; 

首先將值「 119「(數組長度的字符串值)到字節數組{0x31,0x31,0x39},ascii值爲1,1,9。然後,您將第一個和第分配給bytesToSend [2]。這就是你如何獲得0x31

所以要回答你的問題,數組的長度就是你給它的長度,例如119。

相關問題