Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];

Вниз

Как переписать код на Си в делфи? заранее благодарен   Найти похожие ветки 

 
promelectronika   (2003-09-10 15:02) [0]

float f;
void main()
{
unsigned char *cc, mm[7];
port_init(0,207);
printf(" ‘“ЊЊЂ =");
sport(0,84); /* T */
delay(100);
sport(0,48); /* 0 */
delay(100);
sport(0,70);/* F */

for(i=0;i<=7;i++)
mm[i]=rport(0);
delay(1000);
for(i=1;i<=4;i++)
printf("<%x>",mm[i]);
/* Џђ…ЋЃђЂ‡Ћ‚ЂЌ?… Џђ?Ќџ’›• „ЂЌЌ›• ‚ ”ЋђЊЂ’ "FLOAT" */
cc = (unsigned char *)&f ;
for(i = 1 ; i <=4 ; i++)
*cc++ = mm[i] ;
printf("%.2f", f) ;

}


 
Saint_Byte   (2003-09-10 17:08) [1]

Это скорее всего на паскаль надо переписывать


 
Saint_Byte   (2003-09-10 17:10) [2]

sport(0,84); и еще что это за Саба ???

Дык это написано с кучей самописных саб вот ... Так что =(((


 
=Sniper=   (2003-09-10 22:51) [3]

Ради прикола попробовал перевести! %-)

PROGRAM cool;
var
f : double;
cc : Pchar;
mm7:array[0..6] of Pchar

begin
port_init(0,207);
Write(" ‘“ЊЊЂ =");
sport(0,84);// T
delay(100);
sport(0,48);// 0
delay(100);
sport(0,70);// F
for i:= 1 to 7 do
mm[i] := rport(0);
delay(1000);
for i:= 1 to 4 do
write("<%x>",mm[i]);

// cc = (unsigned char *)&f ; не знаю что это такое! %-)
for i:= 1 to 4 do
*cc++ = mm[i] ;//не знаю что это такое! %-)
write("%.2f", f) ;
end.


 
mzu   (2003-09-11 09:42) [4]

Ради прикола можно использовать транслятор, входящий в комплект Gnu Compiler Collection ...


 
savva   (2003-09-11 11:04) [5]

> // cc = (unsigned char *)&f ; не знаю что это такое! %-)
получаем ссылку по значению на первый байт чилса F
> for i:= 1 to 4 do
> *cc++ = mm[i] ;//не знаю что это такое! %-)
а дальше проходимся, наращиваем указатель и заполняем послеовательно..


 
xxxXXxx   (2003-09-11 11:16) [6]

Удалено модератором
Примечание: offtopic


 
=Sniper=   (2003-09-11 13:12) [7]

2 savva: спасибо буду знать! :-)
И ещё объясни чё это такое:
&&
!=

???


 
AKuman   (2003-09-11 13:57) [8]

&& - логическое умножение, на Паскале and

!= - не равно <>

Вообще судя по всему эта С-программа читает побайтно вещественное число из аппаратного порта 207 (Вероятно показания датчика).
Вот только набор функций port_init(), sport(), rport() я не припомню. Надо посмотреть в справочнике по С. :-)


 
AKuman   (2003-09-11 14:08) [9]

Кстати, если кто помнит, в Turbo/Borland Pascale с портами работали как с массивом.
Например:
var
ByteFromPort : Byte;
begin
ByteFromPort := Port[207];
Port[207] := $01;
end.


А как в Дельфи? Кто знает?


 
first_aid   (2003-09-11 14:19) [10]

2 AKuman

А в Дельфи, нет такого, под NT например с портами напрямую работать нельзя.


 
Reindeer Moss Eater   (2003-09-11 15:06) [11]

www.google.com + "c2pas"


 
AKuman   (2003-09-11 15:21) [12]

2 Reindeer Moss Eater ©

//www.google.com + "c2pas"

c2pas не поможет для задач подобного рода. Как совершенно точно заметил first_aid © старшие версии Виндов не позволяют напрямую работать с аппарвтными портами. Нужно искать что-то типа

www.google.com + "Как написать драйвер на Delphi"

Хотя в ранних версиях Виндов очень помогали ассемблерные вставки.


 
promelectronika   (2003-09-11 16:40) [13]

меня интересует все же эта часть кода:

...
float f;
void main()
{
unsigned char *cc, mm[7];
...
...
cc = (unsigned char *)&f ;
for(i = 1 ; i <=4 ; i++)
*cc++ = mm[i] ;
printf("%.2f", f) ;

за ранее благодарен. Олег


 
Verg   (2003-09-11 16:53) [14]

Ну что?

var f : single;

procedure main;
var cc: pchar;
mm : array[0..6] of byte; // Там кстати ошибка в цикле - там надо i<=6
begin
....
сс := pchar(@mm);
for i:=1 to 4 do
begin
cc^:=chr(mm[I]);
inc(cc);
end;
write(f);
...
end;


 
Verg   (2003-09-11 16:54) [15]


> сс := pchar(@mm);


Тьфу ты!
сс := pchar(@f);


 
icWasya   (2003-09-11 17:03) [16]

PROGRAM cool;
var
mm : array[0..6] of Byte;
f : single;
c : array[0..3] of Byte absolute f;

begin
port_init(0,207);
Write(" Сумма=");
sport(0,84);// T
delay(100);
sport(0,48);// 0
delay(100);
sport(0,70);// F
for i:= 0 to 6 do
mm[i] := rport(0);
sleep(1000);

for i:= 0 to 3 do
write( HexToStr(mm[i]));

/* ПРЕОБРАЗОВАНИЕ ПРИНЯТЫХ ДАННЫХ В ФОРМАТ "FLOAT" */

for i:= 0 to 3 do
c[i] := mm[i] ; // возможно надо c[3-i] := mm[i]

write( " ", f ) ;
end.


 
promelectronika   (2003-09-17 09:56) [17]

Спасибо!
Решение найдено.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.01 c
1-96281
solo
2003-09-16 23:15
2003.09.29
Непонятные ошибки.


4-96480
shark
2003-07-26 19:19
2003.09.29
FindWindow(... , ...)


3-96131
a123
2003-09-05 18:04
2003.09.29
ADO


1-96176
Stas
2003-09-16 12:48
2003.09.29
TColorDialog


1-96262
ShadowSmart
2003-09-17 11:36
2003.09.29
try except end





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский