Текущий архив: 2004.05.16;
Скачать: CL | DM;
ВнизПреобразование quoted string в control string Найти похожие ветки
← →
Tex (2004-04-29 10:59) [0]Ув. мастера!
Подскажите, как преобразовать текстовое 16-ричное представление в числовое.
Т.е. из БД получаем quoted string (например "1F0000000"), а преобразовать нужно в битовый массив (#$1F#0#0#0#0#0#0#0).
Заранее спасибо.
← →
Юрий Зотов © (2004-04-29 11:46) [1]S - строка в HEX виде
B - packed array of byte
if Odd(Length(S)) then S := "0" + S;
SetLength(B, Length(S) div 2);
for i := 0 to High(B) do
B[i] := (StrToInt(S[2 * i + 1]) shl 4) or StrToInt(S[2 * i + 2]);
← →
Tex (2004-04-29 12:11) [2]При таком преобразовании строки "1F0000000" получаем сообщение
"... EConvertError with message ""F" is not a valid integer value"..."
← →
Юрий Зотов © (2004-04-29 12:19) [3]Сорри, маленькая неточность. Надо добавить знак $:
B[i] := (StrToInt("$" + S[2 * i + 1]) shl 4) or StrToInt("$" + S[2 * i + 2]);
← →
Tex (2004-04-29 15:41) [4]Спасибо за помощь,
но получаем массив B(31,0,0,0,0,0,0,0),
31(dec)=1F(hex),
А нужна именно строка #$1F#0#0#0#0#0#0#0. Как преобразовать?
← →
Jack128 © (2004-04-29 16:01) [5]
> А нужна именно строка
так?
function f(ch: char): byte;
begin
if (ch >= "0") and (ch <= "9") then
Result := ord(ch) - ord("0")
else
Result := ord(ch) - ord("A") + 10;
end;
function Convent(s: string): string;
var
i: Integer;
begin
SetLength(Result, Length(s));
for i := 1 to Length(s) do Result[i] := f(s[i]);
end;
← →
WebErr © (2004-04-29 16:09) [6]С помощью рук и головы! :(
← →
Tex (2004-04-29 16:43) [7]Окончательный вариант такой:
var
S, S1 : String;
B : array of byte;
begin
if Odd(Length(S)) then S := "0" + S;
SetLength(B, Length(S) div 2);
S1 := "";
for i := 0 to High(B) do
begin
B[i] := (StrToInt("$" + S[2*i + 1]) shl 4) or StrToInt("$" + S[2*i + 2]);
S1 := S1 + char(B[i]);
end;
end;
Юрий Зотов, большое-пребольшое Вам спасибо.
Страницы: 1 вся ветка
Текущий архив: 2004.05.16;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.034 c