Главная страница
    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.46 MB
Время: 0.045 c
15-1232736848
Petr V. Abramov
2009-01-23 21:54
2009.03.29
МИЗЕР :)


15-1233084580
Eraser
2009-01-27 22:29
2009.03.29
Скрыть строку от отладчика и хекс-редактора


15-1232528030
deadteachers
2009-01-21 11:53
2009.03.29
RS-232


2-1233660812
programmer90
2009-02-03 14:33
2009.03.29
Access Violation


2-1234175149
b@v
2009-02-09 13:25
2009.03.29
Отчет





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский