Diskuze: 8-bit + 8-bit + 8-bit => 24-bit a 24-bit => 8-bit + 8-bit + 8-bit
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Dělá se to pomocí shiftovacíh operároru a ORu.
Příklad (dosaď si tam své názvy)
Dim b1 = 64 ' 0100 0000
Dim b2 = 15 ' 0000 1111
Dim b3 = 234 ' 1110 1010
Dim num = (b1 << 16) Or (b2 << 8) Or (b3)
Debugger.Break()
Funguje to tak, že se hodnoty bitově posunou o 8násobky a pak se operátoem OR proloží
tzn. b1 se posová o 16, takže
z
|||| ||||
0000 0000 0000 0000 0000 0000 0100 0000
se stane
|||| ||||
0000 0000 0100 0000 0000 0000 0000 0000
b2 se posová o 8, takže
z
|||| ||||
0000 0000 0000 0000 0000 0000 0000 1111
se stane
|||| ||||
0000 0000 0000 0000 0000 1111 0000 0000
a b3 se ponechává
|||| ||||
0000 0000 0000 0000 0000 0000 1110 1010
No pak se to "spojí" pomocí operátoru OR.
|||| ||||
0000 0000 0100 0000 0000 0000 0000 0000
OR
|||| ||||
0000 0000 0000 0000 0000 1111 0000 0000
OR
|||| ||||
0000 0000 0000 0000 0000 0000 1110 1010
se rovná
0000 0000 0100 0000 0000 1111 1110 1010
tedy 4198378.
Správně bys ještě měl uvést že datový typ je místo Integer (Int32) UInt32, protože se jedná o neznaménkové číslo. Tím že nenastavuješ nejvyšší byte ti to však bude fungovat i se znaménkovým.
Dobrý den Pánové.
Děkuji moc za vaše rady.
Zapoměl jsem však napsat, že jde o "Visual Basic 6.0".
Asi není možné vložit soubor ZIP.rar což mi komplikuje podat jednoduchou
otázku.
Alespoň tedy přidávám obrázek a upravený kód.
Po stisknutí tlačítka "Command1" jsou spojeny tři 8-bitové hodnoty na jednu 24-bitovou hodnotu:
Private Sub Command1_Click()
Dim bit_08_01 As Byte ' definition - first 8 bits (7-0)
Dim bit_16_09 As Byte ' definition - second 8 bits (15-8)
Dim bit_24_17 As Byte ' definition - third 8 bits (23-16)
Dim bit_24_01 As Integer ' definition - joining three 8-bit numbers
bit_08_01 = Text1.Text ' first 8 bits from TextBox1
bit_16_09 = Text2.Text ' second 8 bits from TextBox2
bit_24_17 = Text3.Text ' third 8 bits from TextBox3
' bit_24_01 = (bit_24_17 \ 16) Or (bit_16_09 \ 8) Or (bit_08_01)
Text4.Text = bit_24_01 ' joining three 8-bit numbers to TextBox4
End Sub
Po stisknutí tlačítka "Command2" je rozdělena jedna 24-bitová hodnota na tři 8-bitové hodnoty:
Private Sub Command2_Click()
Dim bix_08_01 As Byte ' definition - first 8 bits (7-0)
Dim bix_16_09 As Byte ' definition - second 8 bits (15-8)
Dim bix_24_17 As Byte ' definition - third 8 bits (23-16)
Dim bix_24_01 As Long ' definition - joining three 8-bit numbers
bix_24_01 = Text4.Text ' joined three 8-bit numbers to TextBox4
' bix_08_01 = bix_24_01 (7-0)
' bix_16_09 = bix_24_01 (15-8)
' bix_24_17 = bix_24_01 (23-16)
Text5.Text = bix_08_01 ' first 8 bits to TextBox5
Text6.Text = bix_16_09 ' second 8 bits to TextBox6
Text7.Text = bix_24_17 ' third 8 bits to TextBox7
End Sub
Private Sub Command1_Click()
Dim bit_08_01 As Byte ' definition - first 8 bits (7-0)
Dim bit_16_09 As Byte ' definition - second 8 bits (15-8)
Dim bit_24_17 As Byte ' definition - third 8 bits (23-16)
Dim bit_24_01 As Integer ' definition - joining three 8-bit numbers
bit_08_01 = Text1.Text ' first 8 bits from TextBox1
bit_16_09 = Text2.Text ' second 8 bits from TextBox2
bit_24_17 = Text3.Text ' third 8 bits from TextBox3
bit_24_01 = bit_24_17 * 65536 + bit_16_09 * 256 + bit_08_01
Text4.Text = bit_24_01 ' joining three 8-bit numbers to TextBox4
End Sub
Private Sub Command2_Click()
Dim bix_08_01 As Byte ' definition - first 8 bits (7-0)
Dim bix_16_09 As Byte ' definition - second 8 bits (15-8)
Dim bix_24_17 As Byte ' definition - third 8 bits (23-16)
Dim bix_24_01 As Integer ' definition - joining three 8-bit numbers
bix_24_01 = Text4.Text ' joined three 8-bit numbers to TextBox4
bix_24_17 = bix_24_01 \ 65536
bix_24_01 = bix_24_01 Mod 65536
bix_16_09 = bix_24_01 \ 256
bix_24_01 = bix_24_01 Mod 256
bix_08_01 = bix_24_01
Text5.Text = bix_08_01 ' first 8 bits to TextBox5
Text6.Text = bix_16_09 ' second 8 bits to TextBox6
Text7.Text = bix_24_17 ' third 8 bits to TextBox7
End Sub
Pane "plelovsky" - moc Vám děkuji. Problém je vyřešen.
Z důvodu přetečení jsem Integer nahradil Long a definoval jsem čísla
"číslo" na CLng(číslo):
Po stisknutí tlačítka "Command1" jsou spojeny tři 8-bitové hodnoty na jednu 24-bitovou hodnotu:
Private Sub Command1_Click()
Dim bit_08_01 As Byte ' definition - first 8 bits (7-0)
Dim bit_16_09 As Byte ' definition - second 8 bits (15-8)
Dim bit_24_17 As Byte ' definition - third 8 bits (23-16)
Dim bit_24_01 As Long ' definition - joining three 8-bit numbers
bit_08_01 = Text1.Text ' first 8 bits from TextBox1
bit_16_09 = Text2.Text ' second 8 bits from TextBox2
bit_24_17 = Text3.Text ' third 8 bits from TextBox3
bit_24_01 = bit_24_17 * CLng(65536) + bit_16_09 * CLng(256) + bit_08_01
Text4.Text = bit_24_01 ' joining three 8-bit numbers to TextBox4
End Sub
Po stisknutí tlačítka "Command2" je rozdělena jedna 24-bitová hodnota na tři 8-bitové hodnoty:
Private Sub Command2_Click()
Dim bix_08_01 As Byte ' definition - first 8 bits (7-0)
Dim bix_16_09 As Byte ' definition - second 8 bits (15-8)
Dim bix_24_17 As Byte ' definition - third 8 bits (23-16)
Dim bix_24_01 As Long ' definition - joining three 8-bit numbers
bix_24_01 = Text4.Text ' joined three 8-bit numbers to TextBox4
bix_24_17 = bix_24_01 \ CLng(65536)
bix_24_01 = bix_24_01 Mod CLng(65536)
bix_16_09 = bix_24_01 \ CLng(256)
bix_24_01 = bix_24_01 Mod CLng(256)
bix_08_01 = bix_24_01
Text5.Text = bix_08_01 ' first 8 bits to TextBox5
Text6.Text = bix_16_09 ' second 8 bits to TextBox6
Text7.Text = bix_24_17 ' third 8 bits to TextBox7
End Sub
Pravda, ve VB 6 odpovídá datový typ Integer typu Short (Int16) v .NET, takže je potřeba použít Long, což odpovídá typu Integer (Int32) v .NET.
Zobrazeno 8 zpráv z 8.