ОБСУЖДЕНИЕ

Битовые операции с десятичными значениями

2 ответов 4,9 тыс.
Автор темы
По работе заставили изучать программу DIAdem (может кто знает такую). Написание DataPlugin - ов в ней осуществляется, вроде как, на Visual Basic Script - приходится на ходу изучать бейсик. Вопрос: имеется массив из 8 десятичных чисел (значения не >255), нужно удалить 2 старших бита и путем сдвигов получить 6 десятичных значений.
Для наглядности:

исходный массив в двоичном виде:
HHHHhhhh GGGGgggg FFFFffff EEEEeeee DDDDdddd CCCCcccc BBBBbbbb AAAAaaaa

массив после удаления старших битов:
HHhhhh GGgggg FFffff EEeeee DDdddd CCcccc BBbbbb AAaaaa

массив после сдвигов:
HHhhhhGG ggggFFff ffEEeeee DDddddCC ccccBBbb bbAAaaaa

Буду благодарен за любую помощь.
 
исходный массив в двоичном виде:
HHHHhhhh GGGGgggg FFFFffff EEEEeeee DDDDdddd CCCCcccc BBBBbbbb AAAAaaaa
здоровское у тебя представление о двоичных данных, лучше б было бы, если представил нормально, да и с реальными цифрами.
Только без обид )!!!
Вот тебе решение задачи ).

Код:
Dim arr1(7) As String ' Наш массив бит
Dim arr2(5) As String ' Конечный массив бит
Dim pospe_udal_bit As String ' Переменная сама за себя говорит )

Private Sub Command1_Click()
' Тут присваиваю какие-то значения массиву
arr1(0) = "00011101": arr1(1) = "01011101": arr1(2) = "10011101": arr1(3) = "00010101"
arr1(4) = "00101101": arr1(5) = "01100101": arr1(6) = "00001101": arr1(7) = "00011001"

For i = 0 To 7
arr1(i) = Right(arr1(i), 6) ' С права берем 6 цифр, тем самым отсекая 1-е две.
Next i

pospe_udal_bit = Replace(Join(arr1), " ", "") ' Объединяем полученный массив в одну строку
' и удаляем пробелы

For i = 0 To 5
arr2(i) = Mid(pospe_udal_bit, (i * 8) + 1, 8) ' разделяем строку на байты
Next i										' и получаем наши желанные 6 байт!

End Sub
 
Код:
Dim arr1(7) As String ' Наш массив бит
Dim arr2(5) As String ' Конечный массив бит
Dim pospe_udal_bit As String ' Переменная сама за себя говорит )

Private Sub Command1_Click()
' Тут присваиваю какие-то значения массиву
arr1(0) = "00011101": arr1(1) = "01011101": arr1(2) = "10011101": arr1(3) = "00010101"
arr1(4) = "00101101": arr1(5) = "01100101": arr1(6) = "00001101": arr1(7) = "00011001"

For i = 0 To 7
arr1(i) = Right(arr1(i), 6) ' С права берем 6 цифр, тем самым отсекая 1-е две.
Next i

pospe_udal_bit = Replace(Join(arr1), " ", "") ' Объединяем полученный массив в одну строку
' и удаляем пробелы

For i = 0 To 5
arr2(i) = Mid(pospe_udal_bit, (i * 8) + 1, 8) ' разделяем строку на байты
Next i										' и получаем наши желанные 6 байт!

End Sub