掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ビックエンディアンするには? (ID:52686)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
お世話になっております。 KENです。 やっとできました! (T-T)号泣 YuO様 並びに tetrapod様 JUN2様だと思っております。 深くお礼を申し上げます。 まだ、保険が1つできただけでありまして・・・ ファイルマッピングについても検討したいと思います。 もう、少しお付き合い宜しくお願い致します。 >マッピングに成功すれば,MapViewOfFile APIで得られたポインタを, >BYTEの配列のように扱うことができます。 ありがとうございます。 今から検討に入ります。 今回のプログラムよりもマッピングの方が パフォーマンスが速いのですかね? 今のプログラムのパフォーマンス(4MB→2秒程度)でも充分満足ですけど・・・ いろいろと検証したいので。 >読み込み→変換→書き込み→読み込み→変換→書き込み…… >とすれば,変換されたデータは消えませんよ。 これで実現できました! (TOT)号泣 読み込み→変換→書き込み→読み込み→変換→書き込みっと ReadFileを呼び出すごとに先頭から上書きされるじゃないかと 思いながらダメもとでヤってみたら動きました! ありがとうございます ^^ >バッファサイズとファイルサイズを比較して,小さい方をとる,という方法で回避できます。 はい! 参考になりました! >2バイト単位でアクセスしているのだから,2で割る必要はあります。 C言語以前の問題ですね・・・ (--;; すいません・・・。。。 以下にソース掲載します。 -------------------------------------------------------- #include <windows.h> #include "BigEndian.h" #define BUFFER_SIZE 100000 //100KB DWORD BigEndian(LPCTSTR lpFileName1) { HANDLE hFile1, hFile2; DWORD dwRead1; DWORD dwFileSize; DWORD dwLoop, dwSurp; DWORD i,j; BYTE FileData[BUFFER_SIZE]; BYTE temp; hFile1 = CreateFile( lpFileName1, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if( hFile1 == INVALID_HANDLE_VALUE ){ return NOT_EXIST_FILE1; } hFile2 = CreateFile( "test.bin", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); if( hFile2 == INVALID_HANDLE_VALUE ){ return NOT_EXIST_FILE2; } dwFileSize = GetFileSize( hFile1, NULL ); /* ファイルサイズ 商 */ dwLoop = dwFileSize / BUFFER_SIZE; /* ファイルサイズ 余り */ dwSurp = dwFileSize % BUFFER_SIZE; /* ファイルサイズ 商 */ for( j = 1; j <= dwLoop; j++ ){ /* ファイル読み込み */ ReadFile( hFile1, &FileData, BUFFER_SIZE, &dwRead1, NULL ); /* ビックエンディアン */ for( i=0; i < dwRead1 / 2; i++ ){ temp = FileData[2 * i]; FileData[2 * i] = FileData[2 * i + 1]; FileData[2 * i + 1] = temp; } /* ファイル書き込み */ WriteFile( hFile2, &FileData, dwRead1, &dwRead1, NULL ); } /* ファイルサイズ 余り */ ReadFile( hFile1, &FileData, dwSurp, &dwRead1, NULL ); for( i=0; i < dwRead1 / 2; i++ ){ temp = FileData[2 * i]; FileData[2 * i] = FileData[2 * i + 1]; FileData[2 * i + 1] = temp; } WriteFile( hFile2, &FileData, dwRead1, &dwRead1, NULL ); CloseHandle( hFile1 ); CloseHandle( hFile2 ); return SUCCESS; }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.