Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
6-1080200333
nester
2004-03-25 10:38
2004.05.16
Как программно добавить эккаунт в OutlookExpress


7-1081509708
Zheks
2004-04-09 15:21
2004.05.16
Как без лишних вопросов выключить комп под WinXP?


1-1083000274
I.Ru.Ru
2004-04-26 21:24
2004.05.16
Автоширина в StringGride и Gride


3-1082021614
ГАГН
2004-04-15 13:33
2004.05.16
как из базы удолить нулевые значения?


11-1069871866
Юрий Ж.
2003-11-26 21:37
2004.05.16
Глючки в кол?




   Наверх