Что нового

Преобразование из Hex в Bytes

Tuxzer92

Новичок
Сообщения
64
Репутация
0
Здравствуйте, не нашел какую-либо функцию для преобразования hex строк в байты.

Вот к примеру как на Java:
Java:
String Hex = "53bad96db27df";
byte[] Bytes = new BigInteger(Hex, 16).toByteArray();

В AI нет чего-то подобного?
 

IMStrelcov

CTPEJIbLLOB
Сообщения
253
Репутация
64
В AI нет чего-то подобного?
Если я правильно понял то читайте справку
Функция Dec - Преобразует строку содержащую шестнадцатеричное число в десятичное
и Hex - Преобразует десятичное целое число или бинарные данные в шестнадцатеричный вид
или же вам нужно
Функция BinaryToString - Преобразовывает бинарные данные в строку
 
Автор
T

Tuxzer92

Новичок
Сообщения
64
Репутация
0
Если я правильно понял то читайте справку
Функция Dec - Преобразует строку содержащую шестнадцатеричное число в десятичное
и Hex - Преобразует десятичное целое число или бинарные данные в шестнадцатеричный вид
или же вам нужно
Функция BinaryToString - Преобразовывает бинарные данные в строку
Да, спасибо.
 

Oki

Продвинутый
Сообщения
452
Репутация
62
Не вижу здесь ответа на заданный вопрос, а меня он тоже интересует. При чём здесь все эти функции, которые на выходе не дают требуемое? Ведь топикстартер достаточно ясно указал, что на выходе требуется массив.

Вполне возможно, что AutoIt вообще не умеет решать такую задачу, кроме как обходными путями, поскольку в AutoIt нет привычных бинарных данных размером в 1 байт?
 

Oki

Продвинутый
Сообщения
452
Репутация
62
Код:
$aByte = StringRegExp($sHex, '(?imsx)([A-Fa-f0-9]{1,2})', 3)
К сожалению, даже такая весьма непрямая обработка требует дополнительного прохода по массиву, чтобы избавиться от шестнадцатиричного представления. Пока что и пользуюсь всякими подобными непрямыми методами получения массива байт, что не очень радует. В качестве решения поставленной топикстартером задачи этот код всё же годится, поэтому более общий вопрос перенаправлен в другую тему.
 
Последнее редактирование:

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
пользуюсь всякими подобными непрямыми методами получения массива байт
Да, разработчик AutoIt не реализовал подобную функцию. В AutoIt вообще много чего нативно не реализовано. И для этого есть UDF.
Вот ещё пример получения массива байт
Код:
$sHex = "0x53bad96db27df0" ; байт кодируется двумя hex-символами, поэтому
                           ; необходимо чётное количество hex-символов после 0x
$bBin = Binary($sHex)
$iLen = BinaryLen($bBin)
Dim $aBytes[$iLen + 1] = [$iLen]
For $i = 1 To $iLen
  $aBytes[$i] = BinaryMid($bBin, $i, 1)
Next

#include <Array.au3>
_ArrayDisplay($aBytes)
 
  • Like
Реакции: Oki

Andrey_A

Продвинутый
Сообщения
319
Репутация
68
Код:
#include <Array.au3>
$sHex = "53bad96db27df0"
$sHex=StringRegExpReplace($sHex,'(..)','0x$1')
$aBytes=StringRegExp($sHex,'(.{4})',3)
_ArrayDisplay($aBytes)


Код:
#include<Array.au3>
$aBytes=StringRegExp(StringRegExpReplace('53bad96db27df0','(..)','0x$1'),'(....)',3)
_ArrayDisplay($aBytes)
 
Последнее редактирование:
Верх