2011-09-15 24 views
1

私はシリアルステッピングモータコントローラを使ってC言語でプログラミングしています。問題はコントローラがバイナリ表現で値を返し、表示方法がわかりません。明らかに、それをintに変換することは、コントローラが送信する正確なバイナリ表現を必要とするため、オプションではありません。バイナリ表現を表示しようとしています

出力の形式は、 MSB - > LSB(最下位ビットから最下位ビット)です。これは無意味なデータは奇妙な形や記号、すなわち返す

char buff[] = "@01 STAT\r"; 
char readbuff[10]; 
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); 
n = write (fd,buff, len); 
...... 

n = read(fd, readbuff, 3); 
printf("STAT returns %c\n", readbuff); 
...... 

:現時点では

は、私のような何かをしようとしています。私はrawに出力を設定し、0パリティを使用しています。私は初期化パラメータをスキップしましたが、それが役に立つ場合は追加できます。

好奇心が強い人は、私はオーシャンコントロールKTA-190シリアルステッパーモーターを使用しています。

答えて

3

値を%c、つまりASCII文字、したがって「奇妙な図形と記号」として出力しています。

%c%dまたは%xに変更すると、値の10進数または16進数表記が表示されます。それをバイナリとして解釈することができます(例えば、0x0Aは00001010になります)。

また、各文字をreadbuffから確実に取得する必要があります。あなたはをループにしたいとのように、各配列インデックスのため%xをプリントアウトすることがあります

for (i = 0; i < 10; i++) 
{ 
    printf("readbuff[%d]: 0x%x\n", i, readbuff[i]); 
} 

(注、マジックナンバーを避けるために優れているので、その後、#define READBUFF_LEN 10 と同様に何かをするよりよいだろう

バイナリ値を実際に出力したい場合、つまり16進数または10進数を出力するのに十分でない場合は、これを行う必要があります ここでの回答でこれを行う方法の例があります:Is there a printf converter to print in binary format?

関連する問題