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

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

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

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

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

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

Для каждого представления типа Long, Integer (4байта явно не integer), single, Currency есть свои правила. Я предложил общий вариант, который действует например для команд типа GOTO_на_метку в ассемблер представлении (когда нет отрицательных чисел). Если Вас интерисует распознавание баз данных, и редактирование чужой б/д, в этом случае сделайте эксперементальную свою и увидите как создаются отрицательные числа. Принцып тот же, только на мое мнение максимальное число, наверное, разделено на два, хоть я может и не прав. Обычный Boolean создается из двух байт, лично я пользуюсь в базе вместо Boolean обычным Byte.
...
Рейтинг: 0 / 0
Как по кодам в байтах восстановить число
    #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
Как по кодам в байтах восстановить число
    #37137722
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо за ответ.

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

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

Спасибо, Андрей.
...
Рейтинг: 0 / 0
Как по кодам в байтах восстановить число
    #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
Как по кодам в байтах восстановить число
    #37137757
Gwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы ТС считывал заголовок Bmp-файла как структуру (как нормальные люди), не нужно было бы заниматься такой чепуховиной..
...
Рейтинг: 0 / 0
Как по кодам в байтах восстановить число
    #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
Как по кодам в байтах восстановить число
    #37138611
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот еще большое спасибо.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как по кодам в байтах восстановить число
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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