powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Расшифровать/преобразовать байты, полученные через MSWinSock
3 сообщений из 3, страница 1 из 1
Расшифровать/преобразовать байты, полученные через MSWinSock
    #37336739
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через Activе-X MSWinSock получил на клиента сообщение (последовательность байт). Первые 4 байта последовательности- длина сообщения. Как эти 4 байта преобразовать в десятичный тип? Например, пришло 00 00 00 11 00 45 68 и т.д.
Пробовал так (используя пример с форума- функцию BinDecHex2Dec):

Код: plaintext
1.
2.
3.
4.
m.nBytes = thisform.ws1.object.BytesReceived()
m.bStr_read = SPACE(m.nBytes)
thisform.ws1.object.GetData(@bStr_read, m.nBytes)
m.DecValue = BinDecHex2Dec(SUBS(bStr_read, 1 , 4 ),  16 )  && так функция не работает
m.DecValue = BinDecHex2Dec(' 00000011 ',  16 )                && так функция работает, возвращает  17 

Возможно, байты нужно преобразовать в строку? Как это сделать?
При этом, команда:

Код: plaintext
STRTOFILE(SUBSTR(m.bStr_read, 1 , 4 ), 'byte4.bin',  0 )

пишет в файл 00 00 00 11.
Народ, помогите преобразовать!
...
Рейтинг: 0 / 0
Расшифровать/преобразовать байты, полученные через MSWinSock
    #37354640
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если еще нужен совет, то в случае, если выражение не превышает 4 байт, то вообще ничего преобразовывать не надо. FoxPro и так все поймет, если просто добавить специальный префикс "0x" (ноль и латинская буква) к символьной строке

Код: plaintext
?0x00000011

В данном случае этот префикс означает, что далее идет число в 16-ричной системе исчисления. Через переменные это будет выглядеть так

Код: plaintext
1.
2.
m.StrValue = SUBSTR(bStr_read, 1 , 4 )
m.DecValue = Evaluate("0x"+m.StrValue)

Правда, дополнительная проблема заключается в том, что, как правило, числа записываются не слева-направо, а наоборот, справа-налево. Поэтому вместо простого "прямого" чтения, приходится читать по одному символу за раз, переводить символ в 10-чную систему и умножать на степень числа 256. Вполне возможно, что неизвестная функция BinDecHex2Dec() именно это и делает. Поскольку что это за функция - не известно, и что означает фраза "не работает" - тоже не понятно, то и посоветовать что-то вразумительное - невозможно.
...
Рейтинг: 0 / 0
Расшифровать/преобразовать байты, полученные через MSWinSock
    #37357941
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ, спасибо. Щас пока обошелся, работая с байтами, как с текстовой строкой. Но в будущем должно пригодится.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Расшифровать/преобразовать байты, полученные через MSWinSock
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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