2013-04-28 154 views
0

所以基本上這就是我所擁有的。用戶給出一個整數,我將它轉換成3個字節。C#:將24位整數轉換爲三字節數組?

int number = 167123; 

byte[0] = (int)number/65536; 
byte[1] = (int)number/256; 
byte[2] = (int)number; 

stream.Position = 0x503; 
stream.WriteByte((byte)byte[2]); 
stream.WriteByte((byte)byte[1]); 
stream.WriteByte((byte)byte[0]); 

(注:我騎自行車經過的字節數組向後故意末)

當我後來檢查值它按預期工作。現在,我正在努力研究代碼並手動進行計算,但我沒有得到正確的答案。我究竟做錯了什麼?這是如何工作的?什麼是Visual C#寫入第三個字節時它將167123作爲「字節」?

+0

只是說你將一個字節作爲一個不需要的字節來轉換。問題背後還有什麼問題? – Nomad101 2013-04-28 23:10:33

+0

經過一些更多的測試後,我的問題主要是當大於255的整數被轉換爲(字節)時發生了什麼? 例如,當167123被轉換爲(字節)時,它被更改爲211. – Binarynova 2013-04-28 23:25:21

回答

2

這個原因起作用的原因是因爲將int值賦值給該字節會截斷該值。這可能就是爲什麼你的數學不算正確 - 你沒有截斷。

基本上你正在做的分裂是偏移。您的代碼是一樣的:

byte[0] = (int)number >> 16; 
byte[1] = (int)number >> 8; 
byte[2] = (int)number; 

爲了讓您手動數學的工作,做數學題,然後將其轉換爲二進制,並砍掉任何最後8位數以上。這是您分配給字節數組的數字。

一個例子:

byte[1] = (int)number/256; 

這二百五十六分之十六萬七千一百二十三= 652。在二元的,這是001010001100.現在,截斷一個字節(8個比特)的大小以上的一切,你有10001100,其是十進制的140。這是分配給這個字節數組索引的東西。

+0

完美!謝謝!這正是我需要知道的! – Binarynova 2013-04-28 23:29:46