我在Windows上使用GCC編譯器(codeblocks),而且我得到的數據來自UNIX機器,所以它都是以big-endian表示的。我必須先將它交換成小端,然後才能使用它。我會被阻止,但我無法得到這個工作。使用在C++中字節翻轉數據只返回零值
temp = ntohl(fileBuf[N*i+j]);
或
_byteswap_ulong(fileBuf[N*i+j]);
回報無非是零。我所知道的一個事實是不正確的。
傳入數據只是一串32位整數(美國部分地區的海拔數據)。任何幫助是極大的讚賞
編輯:漂亮的新來的,我不知道如果代碼是
typedef unsigned char BYTE
int main()
{
long int temp;
int i,j;
ofstream myFile;
myFile.open("fixed4.txt");
const char *filePath = "input2";
BYTE *fileBuf;
FILE *file = NULL;
if ((file = fopen(filePath, "rb"))==NULL)
cout<< "File could not be opened successfully" << endl;
else
cout << "File Opened successfully" << endl;
long fileSize = getFileSize(file);
fileBuf = new BYTE[fileSize];
//BYTE *flipped;
//flipped = new BYTE[fileSize];
fread(fileBuf, fileSize, 4, file);
for (i=0; i<N; i+=1){
for (j=0; j<N; j+=1){
temp = _byteswap_ulong(fileBuf[N*i+j]);
grid[i][j]=binaryToBase10(temp);
// more code here but it isn't important....
'ntohl'是很好測試,所以這似乎是一個合理的猜測,問題是出在你提供的數據到它。你確定'filebuf [N * i + j]'確實是正確的數據嗎? – 2012-07-17 17:35:34
'printf(「%x%x \ n」,fileBuf [N * i + j],ntohl(fileBuf [N * i + j])'並考慮結果 – 2012-07-17 17:37:39
什麼類型是fileBuf?和temp? – marcinj 2012-07-17 17:38:27