Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CharToByte or not CharToByte [D6, Win95/98, WinME, NT4, Win2k, WinXP]


Страницы:   1 2

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("+") ничего не показывает...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо