Главная страница
    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.009 c
14-96414
SergeySEM
2003-09-10 11:19
2003.09.29
что есть Hook


1-96224
Zhouck
2003-09-17 18:05
2003.09.29
Файл конфигурации - переменное число параметров


1-96175
Yuraz
2003-09-16 11:55
2003.09.29
мастера, посмотрите плз, компонент, компилирует, но не добавляет


4-96491
Maks Realov
2003-07-25 17:43
2003.09.29
Win2k + дочернее окно + Stay On top = false ???


1-96268
Armageddon
2003-09-16 11:43
2003.09.29
Как управлять перемещением мышки





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский