Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как по кодам в байтах восстановить число / 11 сообщений из 11, страница 1 из 1
26.02.2011, 19:40
    #37137627
Игорь С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по кодам в байтах восстановить число
Здравствуйте уважаемые!

Подскажите, как по кодам в четырех последовательных байтах восстановить целое число.

Нужно также изменить это число и записать в эти же байты.

Заранее благодарен
...
Рейтинг: 0 / 0
26.02.2011, 19:45
    #37137631
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по кодам в байтах восстановить число
n4*65536^2+n3*65536+n2*256+n1
...
Рейтинг: 0 / 0
26.02.2011, 19:47
    #37137633
Игорь С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по кодам в байтах восстановить число
Спасибо!

А если чило со знаком, то кажется байты как-то переставлены или нет?
...
Рейтинг: 0 / 0
26.02.2011, 21:30
    #37137708
Игорь С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по кодам в байтах восстановить число
Все нормально, спасибо еще раз!

А может быть подскажете обратный перевод целого в содержимое байтов?
А то нет под рукой литературы.
...
Рейтинг: 0 / 0
26.02.2011, 21:33
    #37137711
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по кодам в байтах восстановить число
Ваш вопрос был прост и не уточнен для чего, потому я постарался также просто ответить и в общем

Для каждого представления типа Long, Integer (4байта явно не integer), single, Currency есть свои правила. Я предложил общий вариант, который действует например для команд типа GOTO_на_метку в ассемблер представлении (когда нет отрицательных чисел). Если Вас интерисует распознавание баз данных, и редактирование чужой б/д, в этом случае сделайте эксперементальную свою и увидите как создаются отрицательные числа. Принцып тот же, только на мое мнение максимальное число, наверное, разделено на два, хоть я может и не прав. Обычный Boolean создается из двух байт, лично я пользуюсь в базе вместо Boolean обычным Byte.
...
Рейтинг: 0 / 0
26.02.2011, 21:44
    #37137720
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по кодам в байтах восстановить число
'Обратный способ из четырех строчек: условие и деление или просто деление
'
'n4*65536^2+n3*65536+n2*256+n1
'обратно будет так:

'Suma - наше число
Suma = inputbox("...","...")
n4=Suma \ 65536^2

n4 будет у нас целым числом поскольку мы его делили знаком "\", тоесть тоже самое что n4=int(Suma /65536^2)
ищем тогда остаток
Suma=Suma-(n4*65536^2) ' надеюсь понятно

n3=Suma \ 65536
Suma=Suma-(n4*65536)

n3=Suma \ 256
n4=Suma-(n4*256) ' Проверте сами. Я без редактора на ходу
stop
...
Рейтинг: 0 / 0
26.02.2011, 21:46
    #37137722
Игорь С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по кодам в байтах восстановить число
Большое спасибо за ответ.

Это я делаю программу "сложения по ширине" bmp - файлов.
А там требуется извлечение из байтового массива целых чисел - ширина, высота, длина файла и растра.
А потом запись данных нового файла обратно в байты.

К счастью, там только целые без знака, так что сложностей со знаками и типом данных нет.
В общем-то как перевести число в содержимое байтов я уже догадался (а может быть и вспомнил.)

Спасибо, Андрей.
...
Рейтинг: 0 / 0
26.02.2011, 21:50
    #37137727
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по кодам в байтах восстановить число
Поспешил (копировал)

Suma = ваше число

n4=Suma \ 65536^2
Suma=Suma-(n4*65536^2)

n3=Suma \ 65536
Suma=Suma-(n3*65536)

n2=Suma \ 256
n1=Suma-(n2*256)
stop
...
Рейтинг: 0 / 0
26.02.2011, 22:19
    #37137757
Gwa
Gwa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по кодам в байтах восстановить число
Если бы ТС считывал заголовок Bmp-файла как структуру (как нормальные люди), не нужно было бы заниматься такой чепуховиной..
...
Рейтинг: 0 / 0
27.02.2011, 00:18
    #37137851
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по кодам в байтах восстановить число
Андрей159n4*65536^2+n3*65536+n2*256+n1Это неправильно. Во-первых, не ^2, а *256, а во вторых, это не учитывает возможности n4>127.

Игорь С,
можно воспользоваться оператором LSet:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Private Type TQuadByte
   b( 0  To  3 ) As Byte
End Type

Private Type TLong
   l As Long
End Type

Private Function FmtX02(ByVal b As Byte) As String
 FmtX02 = Right$("0" & Hex$(b),  2 )
End Function

Public Sub Test()
 Dim x As TLong
 Dim y As TQuadByte
 
 'туда
 x.l = &HF29407A5
 LSet y = x
 Debug.Print FmtX02(y.b( 3 )); FmtX02(y.b( 2 )); FmtX02(y.b( 1 )); FmtX02(y.b( 0 ))
 
 'обратно
 y.b( 0 ) = &H3F
 y.b( 1 ) = &H8
 y.b( 2 ) = &HDE
 y.b( 3 ) = &H1F
 LSet x = y
 Debug.Print Right$("0000000" & Hex$(x.l),  8 )
End Sub
, но см. мысль Gwa.
...
Рейтинг: 0 / 0
27.02.2011, 23:29
    #37138611
Игорь С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как по кодам в байтах восстановить число
Вот еще большое спасибо.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как по кодам в байтах восстановить число / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]