![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CharToByte or not CharToByte [D6, Win95/98, WinME, NT4, Win2k, WinXP]
Serd_hhc © (2002-08-27 12:39:00)Уважаемые мастера,
У меня есть строка, а как её перевести в байтовое изображение (или как там его)?
Ну типа:
+ это 2B
0 это 30
T это 54
Заранее спасибо за ответы!
serd_hhc (2002-08-27 13:35:00) [1]Большое вам СПА-СИ-БО!!!
Skier (2002-08-27 13:34:00) [2]>serd_hhc
function GetStrFromHexStr(const AHexStr : String) : String;
const
HEX_PREFIX = "$";
var
ii : Integer;
begin
Result := EmptyStr;
if (AHexStr = EmptyStr) or
Odd(Length(AHexStr)) then Exit;
ii := 1;
while ii <= Length(AHexStr) do begin
Result := Result + Chr(StrToIntDef(HEX_PREFIX + AHexStr[ii] + AHexStr[ii + 1], 0));
Inc(ii, 2);
end; //while
end;
PVOzerski (2002-08-27 13:31:00) [3]>А как обратно?
{$apptype console}
const
s1:string="2B2B2B41545A30";
var
s2,s3:string;
i,code:integer;
b:byte;
begin
i:=1;
s2:="";
while i<=length(s1)do
begin
s3:="$"+copy(s1,i,2);
inc(i,2);
val(s3,b,code);
s2:=s2+char(b);
end;
writeln(s2," Свершилось :^)");
end.
Skier (2002-08-27 13:27:00) [4]>serd_hhc
Chr(...)
StrToIntDef(...)
serd_hhc (2002-08-27 13:20:00) [5]>Skier
А как обратно?
PVOzerski (2002-08-27 13:08:00) [6]>Нужно из строки +++ATZ0 сделать строку 2B2B2B41545A30 И ПОЛОЖИТЬ
>ЭТО ЗНАЧЕНИЕ В массив из char
{$apptype console}
uses
sysutils;
const
a:array[0..6]of char="+++ATZ0";
var
s:string;
i:integer;
begin
s:="";
for i:=0 to 6 do
s:=s+IntToHex(byte(a[i]),2);
writeln(s," Свершилось :^)");
end.
serd_hhc (2002-08-27 13:02:00) [7]СПАСИБО ВСЕМ!
Skier (2002-08-27 13:00:00) [8]>serd_hhc
function GetHexStr(const ASrcStr : String) : String;
var
ii : Integer;
begin
Result := EmptyStr;
if ASrcStr = EmptyStr then Exit;
for ii := 1 to Length(ASrcStr) do begin
Result := Result + IntToHex(Ord(ASrcStr[ii]), 2);
end; //for
end;
PVOzerski (2002-08-27 12:59:00) [9]Вариант 1: описываем массив байтов и absolute на него переменную - массив символов того же размера.
Вариант 2: делаем запись (record), имеющую только вариантную часть, наподобие
r:record
case integer of
0:(b:array[0..9]of byte);
1:(c:array[0..9]of char);
end;
вариант 3:
type
tB=array[0..9]of byte;
var
c:array[0..9]of char;
...
tB(pointer(@c)^)[2]:=$FF;
Вариант 4:
var
b:array[0..9]of byte;
c:array[0..9]of char;
...
move(b,c,sizeof(b));
serd_hhc (2002-08-27 12:59:00) [10]Ну да, оно и есть..
MBo (2002-08-27 12:58:00) [11]>serd_hhc
Ответ Skier © (27.08.02 12:41) до конца дочитал?
serd_hhc (2002-08-27 12:57:00) [12]И что, никто не поможе?
serd_hhc (2002-08-27 12:53:00) [13]Нужно из строки +++ATZ0 сделать строку 2B2B2B41545A30 И ПОЛОЖИТЬ ЭТО ЗНАЧЕНИЕ В массив из char
Skier (2002-08-27 12:50:00) [14]>serd_hhc
> но в байтовом(или каком там) виде?
Имеется ввиду строковое представление
Hex-значений символов ? Или нет ?
Skier (2002-08-27 12:48:00) [15]>serd_hhc
> Но Ord("+") ничего не показывает...
В смысле ?
serd_hhc (2002-08-27 12:48:00) [16]А как заполнить массив из char вот этой например строчкой:
+++ATZ3, но в байтовом(или каком там) виде?
PVOzerski (2002-08-27 12:47:00) [17]>Но Ord("+") ничего не показывает...
1) Должен показывать, это однозначно.
2) Не верите ord, делайте typecast: byte("+"). Результат будет тот же.
Skier (2002-08-27 12:46:00) [18]>Serd_hhc
Нет. Я блин не выспался :))) Чушь !!!
Skier (2002-08-27 12:45:00) [19]>Serd_hhc
Sorry.
StrToInt("+")
serd_hhc (2002-08-27 12:44:00) [20]Но Ord("+") ничего не показывает...