Форум: "Начинающим";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];
ВнизПеревод значения в бинарный код Найти похожие ветки
← →
Валера (2009-01-28 11:53) [0]Приветствую всех!
Столкнулся с такой проблемой: Как перевести строку в бинарный код
К примеру; WFD76-AS7R3-UTR27-2H2DW
Изначально делал на оборот читал значение в бинарном коде и переводил егоfunction DecodeKey(const HexSrc: array of Byte): string;
const
StartOffset: Integer = $34;
EndOffset: Integer = $34 + 15;
Digits: array[0..23] of CHAR = ("B", "C", "D", "F", "G", "H", "J",
"K", "M", "P", "Q", "R", "T", "V", "W", "X", "Y", "2", "3", "4", "6", "7", "8", "9");
dLen: Integer = 29;
sLen: Integer = 15;
var
HexDigitalPID: array of CARDINAL;
Des: array of CHAR;
I, N: INTEGER;
HN, Value: CARDINAL;
begin
SetLength(HexDigitalPID, dLen);
for I := StartOffset to EndOffset do
begin
HexDigitalPID[I - StartOffSet] := HexSrc[I];
end;
SetLength(Des, dLen + 1);
for I := dLen - 1 downto 0 do
begin
if (((I + 1) mod 6) = 0) then
begin
Des[I] := "-";
end
else
begin
HN := 0;
for N := sLen - 1 downto 0 do
begin
Value := (HN shl 8) or HexDigitalPID[N];
HexDigitalPID[N] := Value div 24;
HN := Value mod 24;
end;
Des[I] := Digits[HN];
end;
end;
Des[dLen] := Chr(0);
for I := 0 to Length(Des) do
begin
Result := Result + Des[I];
end;
end;
← →
MBo © (2009-01-28 13:12) [1]Можно еще на словах алгоритм объяснить?
← →
Правильный$Вася (2009-01-28 13:40) [2]
> Как перевести строку в бинарный кодК примеру; WFD76-AS7R3-
> UTR27-2H2DW
строка и так бинарно хранится в памяти
а символы - просто способ интерпретации этих байтов
← →
Ega23 © (2009-01-28 13:40) [3]
procedure StringToStream(Stream : TStream; const Str : string);
var
i : Integer;
b : byte;
begin
for i:=1 to Length(Str) do
begin
b := Ord(Str[i]);
Stream.WriteBuffer(b, 1);
end;
end;
← →
clickmaker © (2009-01-28 14:11) [4]
> Ega23 © (28.01.09 13:40) [3]
а зачем побайтно-то писать?
Stream.WriteBuffer(S, Length(S));
← →
Ega23 © (2009-01-28 14:19) [5]
> а зачем побайтно-то писать?
> Stream.WriteBuffer(S, Length(S));
И то верно. Фигню сморозил.
← →
Правильный$Вася (2009-01-28 15:40) [6]
> а зачем побайтно-то писать?
мож, из строки минусы выкинуть надо как атрибут визуализации, не требующий хранения
← →
charoey_mag (2009-01-28 15:59) [7]А от чего этот серийник?
← →
Ega23 © (2009-01-28 16:54) [8]
> А от чего этот серийник?
А это совсем необязательно серийник.
← →
Eraser © (2009-01-28 18:45) [9]> [0] Валера (28.01.09 11:53)
как все сложно.
в д2009 есть функции BytesOf и StringOf.
но можно и вручную ничего сложного там нет. например вот реализация перевода строки в буфер.function BytesOf(const Val: RawByteString): TBytes;
var
Len: Integer;
begin
Len := Length(Val);
SetLength(Result, Len);
Move(Val[1], Result[0], Len);
end;
function BytesOf(const Val: AnsiChar): TBytes;
begin
SetLength(Result, 1);
Result[0] := Byte(Val);
end;
← →
Eraser © (2009-01-28 18:46) [10]PS если нужно перевести не строковые данные в строковые, то Base64 в помощь и не нужно изобретать велосипед )
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.039 c