Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.47 MB
Время: 0.485 c
2-1233218140
arhis
2009-01-29 11:35
2009.03.29
Закрытие программы


2-1233786331
Drowsy
2009-02-05 01:25
2009.03.29
Библиотеки на С++ для Дельфи.


15-1232607529
XentaAbsenta
2009-01-22 09:58
2009.03.29
Получить уведомление о всовывании флешки.


2-1233909755
kyn66
2009-02-06 11:42
2009.03.29
Не правильно работает MonthsBetween


2-1233662510
seferot
2009-02-03 15:01
2009.03.29
Удаление записи типа record.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский