2013-02-27 211 views
2

我有一個16位的值是這樣的:如何在VB.NET中將16位值分成兩個8位值?

0000000000000011 

我想在兩個8位值拆分此類似:

00000000 and 00000011 

16位值是一個變量,byte_val1,這是一個無符號的16位整數。

如何在VB.NET中做到這一點?

+0

有你看着http://visualbasic.about.com/od/usingvbnet/a/bitops01.htm和http://stackoverflow.com/questions/1417645/how-to-bitwise-shift-in-vb-net? – 2013-02-27 11:15:57

+0

其實我試過''<< >>'運營商,但沒有成功獲得'00000011' – 2013-02-27 11:19:12

+0

確實只是用>>,或者用AND? 'result =(val_16 >> 8)AND&HFF'? (&H - > 0x) – 2013-02-27 11:27:27

回答

7

你可以使用BitConverter類:

Dim bytes As Byte() = BitConverter.GetBytes(byte_val1) 

現在bytes(0)含有低字節(00000011)和bytes(1)含有高字節(00000000)。

5

爲了獲得低8位,則需要和它與11111111,或0xff
爲了獲得高8位,則需要和它與1111111100000000,或0xff00
然後到算術左移正好是8比特。

我沒有做過的Visual Basic在一段時間,但這個想法如下:

word a = 1930392; 
byte alower = a & 0xff; 
byte ahigher = (a & 0xff00) >> 8; 

哦,這裏是我與名爲aaloweraupper三個文本框和一個按鈕btnDoIt做出了代碼:

Private Sub btnDoIt_Click(sender As Object, e As EventArgs) Handles btnDoIt.Click 
    Dim localA = Integer.Parse(a.Text()) 
    Dim localALower = localA And &HFF 
    Dim localAUpper = (localA And &HFF00) >> 8 

    alower.Text = localALower 
    aupper.Text = localAUpper 
End Sub 

旁註:(localA And &HFF00) >> 8被equivelent到(localA >> 8) And &HFF

+0

從技術上講,AND操作應該不必在進行位移之前。 – 2013-02-27 14:19:26

+0

(localA和&HFF00)>> 8;就像那樣。否則,我需要寫((localA >> 8)和&HFF),如果你喜歡,你可以畫一幅自己的照片,這並不難。 0xff00和0x00ff不等於 – Dmitry 2013-02-27 20:31:42

+0

VB.NET中的位移不是循環的,所以當您將16位數字8位向右移位時,最右邊的8位將被丟棄。因此,不需要先將它們清零。這樣做的唯一原因是如果你有一個更大的數字,比如32位整數。 – 2013-02-28 00:44:09

2

如果你想從任何值(32位,64位,128位,等等)的某些字節(S),一個簡單的位移應該工作。

最簡單的方法是將AND(「binary AND」,也寫爲「&」)與您想要的位的源,然後根據需要多次移動它以獲得所需的值。

Dim initial as Integer = &H123456 ' Hex: 0x123456 
Dim result as Byte = (initial AND &H00FF00) >> 8 
'result = 0x34 

,如果你想加入他們再次是更簡單:

Dim initial as Integer = &H123456 ' Hex: 0x123456 
Dim result_a as Byte = (initial AND &H00FF00) >> 8 
Dim result_b as Byte = (initial AND &HFF0000) >> 16 
Dim final as Integer = (result_a << 8) or (result_b << 16) 
'final = 0x123400 
相關問題