我有一个文件,其中包含许多行和列的矩阵。它看起来像下面的东西:
fa ff 00 10 00
ee ee 00 00 30
dd d1 00 aa 00
矩阵中的每个条目都是八位值的十六进制数。我想将此文件读入二维数组。
我有两个问题:
在我的代码中使用 read 方法,*它包含一个数组,其中包含矩阵的每个条目(两个字符)。如何将每个条目传递给单个变量而不是两个字符?
当我传入单个变量时,如何将其从字符转换为十六进制?我的意思是“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;
}