读取2字节无符号Int二进制文件,而不是2字节有符号Int

时间:2018-09-02 12:33:16

标签: c++ binary readfile

我在这里和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字节有符号整数

0 个答案:

没有答案