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';
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';