数组某些部分的 atoi() 输出错误
Wrong atoi() output in some parts of an array
我正在读取输入文件并将其写入二维整数数组。文件中的所有数字都是两个字符。
它运行良好,但在所有 [48]–[57] 元素中,整数都有一个冗余数字(例如,30、871、447 而不是 3、87、44)。 strtol() 也有同样的问题。输入文件的十六进制代码在那些部分看起来完全正常。
for (int a = 0; a < d; a++)
{
for (int b = 0; b < d; b++)
{
//read two chars
uint16_t num;
fread(&num, sizeof(char) * 2, 1, inptr);
//convert to int and put to the array (it makes wrong int in 48 <= b <= 57)
arr[a][b] = atoi((char*)&num);
//skip space or line break in the input file
fseek(inptr, sizeof(char), SEEK_CUR);
}
}
有什么问题吗?为什么只有 [48]–[57] 工作不正确?
感谢所有评论,尤其是那些提到 atoi
所需的 [=11=]
的评论。
使用 char str[3]
而不是 uint16_t
可以解决问题并让我们正确转换所有数字。
for (int a = 0; a < d; a++)
{
for (int b = 0; b < d; b++)
{
char str[3];
str[2] = '[=10=]';
fread(&str, 2, 1, inptr);
arr[a][b] = atoi(str);
fseek(inptr, 1, SEEK_CUR);
}
}
我正在读取输入文件并将其写入二维整数数组。文件中的所有数字都是两个字符。
它运行良好,但在所有 [48]–[57] 元素中,整数都有一个冗余数字(例如,30、871、447 而不是 3、87、44)。 strtol() 也有同样的问题。输入文件的十六进制代码在那些部分看起来完全正常。
for (int a = 0; a < d; a++)
{
for (int b = 0; b < d; b++)
{
//read two chars
uint16_t num;
fread(&num, sizeof(char) * 2, 1, inptr);
//convert to int and put to the array (it makes wrong int in 48 <= b <= 57)
arr[a][b] = atoi((char*)&num);
//skip space or line break in the input file
fseek(inptr, sizeof(char), SEEK_CUR);
}
}
有什么问题吗?为什么只有 [48]–[57] 工作不正确?
感谢所有评论,尤其是那些提到 atoi
所需的 [=11=]
的评论。
使用 char str[3]
而不是 uint16_t
可以解决问题并让我们正确转换所有数字。
for (int a = 0; a < d; a++)
{
for (int b = 0; b < d; b++)
{
char str[3];
str[2] = '[=10=]';
fread(&str, 2, 1, inptr);
arr[a][b] = atoi(str);
fseek(inptr, 1, SEEK_CUR);
}
}