我在这里和google中进行搜索,然后找到了让我编写此代码的代码,该代码读取了NASA二进制2字节签名文件。
#include <iostream>
#include <fstream>
using namespace std;
const int SRTM_SIZE = 3601;
static int height[SRTM_SIZE][SRTM_SIZE] = {{0},{0}}; //matrix 3601*3601
int main() {
ifstream file("/storage/emulated/0/N52E012.hgt", ios::in | ios::binary);
if(!file) {
cout << "Error opening file!" << endl;
return -1;
}
unsigned char buffer[2];
for (int i = 0; i < SRTM_SIZE; ++i){
for (int j = 0; j < SRTM_SIZE; ++j){
if(!file.read(reinterpret_cast<char*>(buffer), sizeof(buffer))){
cout << "Error reading file!" << endl;
return -1; }
height[i][j] = (buffer[0] << 8) | buffer[1];
}}
// my section
ofstream meinFile;
meinFile.open ("/storage/emulated/0/N52E012.csv");
for(int x = 0; x < SRTM_SIZE; x++){ // from row 1 to row SRTM_Size
for(int y = 0; y < SRTM_SIZE; y++){ // from column 1 to SRTM_Size
int lastCol = SRTM_SIZE-1;
meinFile << height[x][y] << ((y!=lastCol) ? "," : ""); //avoiding "," after last value in each row
}
meinFile << endl;
}
meinFile.close();
cout<< "Converted!" <<endl;
return 0;
}
我的问题是,如何以及在哪里更改此代码,以使他读取2字节无符号二进制文件而不是2字节有符号二进制文件?
提示:这段代码可以完美读取NASA 2字节Signed Int,但是在“ char buffer [2]”使我感到困惑之前也可以“ unsigned”读取。 我仍然是C ++的初学者,但是我知道2字节整数(有符号或无符号)需要4字节,而浮点数是8字节。
编辑我认为此代码可以正常工作,而二进制文件中没有负值(如我的情况),但我检查了一下,发现它包含一个包含负值的NASA文件磁贴,例如在荷兰,它无法正常工作,它的读数为-65565等于-2 !!! 我的结论是,此代码用于2字节无符号整数,而不是2字节有符号整数