fstream 不是逐字符读取而是整数

fstream not reading character by character but whole numbers

void Map::LoadMap(std::string path, int sizeX, int sizeY) {
    char c;
    std::fstream mapFile;
    mapFile.open(path);
    
    int srcX, srcY;
    
    for(int y = 0; y < sizeY; y++) {
        for(int x = 0; x < sizeX; x++) {
            mapFile.get(c);
            srcY = atoi(&c) * 32;
            
            mapFile.get(c);
            srcX = atoi(&c) * 32;
            ks::Game::AddTile(srcY, srcX, x * 32, y * 32);
            std::cout << "X: " << srcX << " Y:" << srcY << std::endl;
            mapFile.ignore();
        }
    }
    mapFile.close();
}

我不会 Post 我的整个地图文件,但布局是这样的

00,01,02,03,44,00,00,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44

我很好奇我的系统是 Mac,我在 windows 上做了一个类似的程序,它逐个字符地读取这段代码,但是在 XCode 上它正在读取文件整数乘以整数而不是逐个字符,它不是获取第一个数字示例 4 并将其乘以 32,而是获取 44 然后乘以 32。

我只想将第一个数字用作 Y 坐标,将第二个数字用作 X 坐标,并跳过“,”。

如果有什么我忽略的地方,请提前致歉,但两个想法比一个想法更好。任何答案将不胜感激。

您的代码调用未定义行为,因为 atoi 需要一个以 null 结尾的字符串,&c 显然不是,它是指向单个字符的指针。

为什么首先需要 atoi?它是 C 中的一个函数,用于转换 atoi("532532").

等字符串

如果您想将单个 char 转换为 int,您可以这样做。

const int number = c - '0';