2012-08-03 65 views
1

我需要在串行設備發送一個十六進制字符串,我這樣做,現在這個樣子:int轉換成字節爲十六進制在C#

byte[] c = new byte[3]; 
c[0] = 0x57; 
c[1] = 0x30; 
ComPort.Write(c,0,c.Length); 

現在我需要爲int的值轉換像30到c[1] = 0x30或34的整數值給出c[1] = 0x34。 我希望你明白我的意思。

那麼我該如何管理呢?

+0

如果值爲100,你會怎麼做? – Jon 2012-08-03 10:46:45

+0

的數值剛好在30到39之間 – user1235288 2012-08-03 10:48:24

+0

我不明白這個問題。你可以試着詳細說明一下嗎? – 2012-08-03 10:49:12

回答

7

這種格式被稱爲binary-coded decimal。對於雙位數字,十個整數除法和十六個繁殖,然後經十加回的餘數:

int num = 45; 
int bcdNum = 16*(num/10)+(num%10); 
+0

@ user1235288是的,(字節)48與其十六進制表示(字節)0x30相同。 – user1235288 2012-08-03 11:31:37

+0

結構'UInt4'或'半字節'可以使這更直觀。然後可以用'new new [6]'代替'new byte [3]',然後用'0x4'和'0x5'代替'0x45'。 – 2012-08-03 11:42:34

+0

什麼是可以包含int數的數字?我的意思是任何數字表示爲2個字節的十六進制數字? – Raulp 2014-11-07 10:32:11

2

另一種方式來做到這一點可能是

c[1] = Convert.ToByte(num.ToString(), 16); 
0

假設INT數據= 2821;通過COM端口發送:

c[0]= Convert.ToByte(data & 0x00FF); 

c[0]= Convert.ToByte(data & 0xFF00) >> 8); 

ComPort.Write(c,0,c.Length);