多くの行と列のマトリックスを含むファイルがあります。以下のようになります。
fa ff 00 10 00
ee ee 00 00 30
dd d1 00 aa 00
行列の各エントリは、8 ビット値の 16 進数です。このファイルを 2 次元配列に読み込みたいと思います。
2 つの問題があります。
私のコードで read メソッドを使用すると、*マトリックスの各エントリ (2 文字) を持つ配列が含まれます。各エントリを 2 文字ではなく 1 つの変数に渡すにはどうすればよいですか?
単一の変数に渡すとき、文字から16進数に変換する方法は? つまり、「ff」は 0xff に変換する必要があります。
私のコードの一部は以下のとおりです。より良い方法を使用できる場合は、トークン化機能を回避できます。
char** tokens;
char** it;
while (fgets(line, sizeof(line), file) != NULL){ /* read a line */
tokens = tokenize(line); // split line
for(it=tokens; it && *it; ++it){
printf("%s\n", *it);
free(*it);
} // end for
} // end while
char** tokenize(const char* str){
int count = 0;
int capacity = 10;
char** result = malloc(capacity*sizeof(*result));
const char* e=str;
if (e) do {
const char* s=e;
e=strpbrk(s," ");
if (count >= capacity)
result = realloc(result, (capacity*=2)*sizeof(*result));
result[count++] = e? strndup(s, e-s) : strdup(s);
} while (e && *(++e));
if (count >= capacity)
result = realloc(result, (capacity+=1)*sizeof(*result));
result[count++] = 0;
return result;
}