数値データをファイルに簡単に書き出すためのツールです。
write16b test.dat 100 200 -100 -200
のように使います。
リトルエンディアン符号付き16bitのバイナリファイルとして追記で保存します。
コンソールでも使えますがpythonや他のスクリプト言語から呼び出して使うことを想定しています。
raspberry piで作成、動作まで確認しました。
gcc -o write16b write16b.cとしてコンパイルしてやります。
write16b.c
2016.11.8修正:書き出すバイナリがリトルエンディアンになっていなかった。
/*
write16b
*/
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
/* prototype */
int isnum(char[]);
void writedata(FILE *,signed short);
void errdisp(void);
int main(int argc, char *argv[]){
int i;
signed short num;
FILE *fp;
if( argc < 3 ){
errdisp();
return 0;
}
fp=fopen(argv[1],"ab");
if(fp==NULL){
printf("file open err!\n");
return -1;
}
for(i=2;i<argc;i++){
if(isnum(argv[i])){
num=(signed short)atoi(argv[i]);
writedata( fp ,num );
}
}
fclose(fp);
return 0;
}
int isnum(char str[]){
int i,len;
len=strlen(str);
for(i=0;i<len;i++){
if(i==0 && str[0]!='-'){
if(!isdigit(str[0])) return 0;
} else if(i > 0) {
if(!isdigit(str[i])) return 0;
}
}
return -1;
}
void writedata(FILE *fp,signed short data){
int mb,lb;
lb = data & 0xff;
mb = ( data & 0xff00 ) >> 8;
fputc(lb,fp);
fputc(mb,fp);
}
void errdisp(){
printf("usage\n");
printf("write16b filename data [[data,data....]]\n\n");
}