Что нового

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

Tuxzer92

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

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

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

IMStrelcov

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

Tuxzer92

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

Oki

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

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

Oki

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

InnI

AutoIT Гуру
Сообщения
4,694
Репутация
1,340
пользуюсь всякими подобными непрямыми методами получения массива байт
Да, разработчик 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
Верх