![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
НАДО ПРЕОБРАЗОВАТЬ !!! Y --> $XX [D6, WinME, WinXP]
sdw_syscoder © (2004-07-25 23:35:00)Ещё раз добрый вечер!
Как преобразовать Char-тип (ASCII-символ) в HEX-формат, т.е. T --> $54. Может кто-нибудь подкинет функцию, а то очень уже поздно и не хочется самому возиться, да и мозги уже не варят.
sdw_syscoder (2004-07-26 10:58:00) [1]Для Anatoly Podgoretsky © (26.07.04 10:49) [18]
Да, я согласен, только как тут не делай, тип String не в масть здесь.
GEN++ (2004-07-26 10:56:00) [2]>sdw_syscoder
После линкера Asm или Си формируется выходной файл в
формате Intel Hex для загрузки во Flash память PIC процессора.
Если что-либо интересует еще, чтобы не "флеймить ветку", пишете
на мой E mail
e_goryunov@mail.ru
Anatoly Podgoretsky (2004-07-26 10:49:00) [3]For T := 0 to Count do S := S + IntToHex(ord(copy(text,t,1)),2);
Это цикл по строкам, плюс выход за границы списка
sdw_syscoder (2004-07-26 10:46:00) [4]GEN++ © (26.07.04 10:32) [13]
Все работает, БЛАГОДАРЮ Вас за помощь! Дальше разбирусь сам.
Хотел бы поинтересоваться, в каком направлении, Вы работаете с этим форматом файла, т.е где применяете?
GEN++ (2004-07-26 10:44:00) [5]ошибка:
S:=S+intToHex(ord(text[n]);
надо так:
S:=S+intToHex(ord(text[n],2);
Думкин (2004-07-26 10:36:00) [6]> [14] sdw_syscoder (26.07.04 10:33)
Ты через строчку читаешь?
Я пошел обедать, дабы не захлебнуться с голодухи и.....
sdw_syscoder (2004-07-26 10:33:00) [7]Думкин © (26.07.04 10:23) [12]
Ну а как тогда привести тип String к Char?
GEN++ (2004-07-26 10:32:00) [8]
const
Text='My text';
var
S:string;
X,n,adr:word;
begin
adr:=$8002;
S:=':'+intToHex(length(text,2)+inToHex(adr,4)+'01';
for n:=1 to length(Text) do
S:=S+intToHex(ord(text[n]);
//дальше считаете контрольную сумму идобавляете к S
//в качестве text может быть строка из Edit, Memo и т.п.
end;
Думкин (2004-07-26 10:23:00) [9]> ord(copy(text,t,1))
нельзя к строкам. ord(text[t])
хотя чем не нравится [1]? Только с
var c:char;
begin
c:='T';
Edit1.Text:=IntToHex(Ord(c),2)
end;
sdw_syscoder (2004-07-26 10:18:00) [10]Anatoly Podgoretsky © (26.07.04 10:08) [10]
А что Вы подрузамеваете под выражением:
- "Да нет как раз в руках, правда не только в них".
И все-таки, хотелось бы получить ответ по делу.
Anatoly Podgoretsky (2004-07-26 10:08:00) [11]Fay © (26.07.04 09:22) [8]
Да нет как раз в руках, правда не только в них
sdw_syscoder (2004-07-26 09:59:00) [12]Доброе утро!
Товарищи, посмотрите пожалуйста код преобразования строки с символами ASCII в 16-е их значения.
Почему происходит ошибка несовместимости типов, когда в цикле функция ORD получает в качестве значения - один символ строки, с помощью команды COPY. Когда задаешь так, ... ord('A') ..., то всё OK!
Как выйти из положения?
function TForm1.AsciiToHex(Source: string): string;
var
S: String;
T: Integer;
begin
with TStringList.Create do
try
Text := StringReplace(Source,#32,#13#10,[rfReplaceAll]);
S := '';
For T := 0 to Count do S := S + IntToHex(ord(copy(text,t,1)),2);
Result := S;
finally
Free;
end;
end;
Fay (2004-07-26 09:22:00) [13]IMHO, это как раз тот самый случай, когда не в руках дело.
Anatoly Podgoretsky (2004-07-26 09:18:00) [14]Fay © (26.07.04 09:14) [6]
Отсюда вывод - руки прочь от флажка
Fay (2004-07-26 09:14:00) [15]2Anatoly Podgoretsky © (26.07.04 09:04) [5]
Да, но только при включенной оптимизации.
Anatoly Podgoretsky (2004-07-26 09:04:00) [16]При делении на 16 ничего не надо знать про shr
Fay (2004-07-26 02:47:00) [17]Кто не варят? Стыдно! Вы что, на 16 делить не умеете, не зоворя уже о shr.
sdw_syscoder (2004-07-25 23:57:00) [18]// А 1 - не маловато ли будет?
Не-а, работает даже при нуле!
Германн (2004-07-25 23:48:00) [19]2 Serge_ (25.07.04 23:47) [1]
А 1 - не маловато ли будет?
Serge_ (2004-07-25 23:47:00) [20]var c:char;
begin
c:='T';
Edit1.Text:=IntToHex(Byte(c),1);
end;