![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перевод значения в бинарный код [D6, WinXP]
Валера © (2009-01-28 11:53:00)Приветствую всех!
Столкнулся с такой проблемой: Как перевести строку в бинарный код
К примеру; 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;
Eraser (2009-01-28 18:46:00) [1]PS если нужно перевести не строковые данные в строковые, то Base64 в помощь и не нужно изобретать велосипед )
Eraser (2009-01-28 18:45:00) [2]> [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;
Ega23 (2009-01-28 16:54:00) [3]
> А от чего этот серийник?
А это совсем необязательно серийник.
charoey_mag (2009-01-28 15:59:00) [4]А от чего этот серийник?
Правильный$Вася (2009-01-28 15:40:00) [5]
> а зачем побайтно-то писать?
мож, из строки минусы выкинуть надо как атрибут визуализации, не требующий хранения
Ega23 (2009-01-28 14:19:00) [6]
> а зачем побайтно-то писать?
> Stream.WriteBuffer(S, Length(S));
И то верно. Фигню сморозил.
clickmaker (2009-01-28 14:11:00) [7]
> Ega23 © (28.01.09 13:40) [3]
а зачем побайтно-то писать?
Stream.WriteBuffer(S, Length(S));
Правильный$Вася (2009-01-28 13:40:00) [8]
> Как перевести строку в бинарный кодК примеру; WFD76-AS7R3-
> UTR27-2H2DW
строка и так бинарно хранится в памяти
а символы - просто способ интерпретации этих байтов
Ega23 (2009-01-28 13:40:00) [9]
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;
MBo (2009-01-28 13:12:00) [10]Можно еще на словах алгоритм объяснить?