Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.29;
Скачать: CL | DM;

Вниз

Перевод значения в бинарный код   Найти похожие ветки 

 
Валера   (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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
2-1234157479
Гарик
2009-02-09 08:31
2009.03.29
Создание форм


15-1232058752
antonn
2009-01-16 01:32
2009.03.29
использование материалов этого сайта


15-1232607826
XentaAbsenta
2009-01-22 10:03
2009.03.29
сервис


15-1233064634
IGray
2009-01-27 16:57
2009.03.29
Локализ-я с пом. D2007-D2009 и назойливые предложения сохраниться


2-1233654039
html
2009-02-03 12:40
2009.03.29
Как узнать на какой адрес будет переход?