2012-03-03 12 views
5

私は簡単な質問をしています。バイトを読み取って、C++で整数のバイトのASCII値を保存する方法

ゴール:ファイル(指定された最初のバイト)から特定のバイトを読み込み、そのバイトのASCII値でint xを作成します。したがって、たとえば、バイト/文字が 'a'の場合、xは97(= 16進数)になります。

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main(){ 
    unsigned int x; 
    unsigned char b; 
    ifstream myFile ("example.txt", ios::out | ios::binary); 
    myFile.seekg (0, ios::beg); 
    myFile >> b; 
    x = (unsigned int)b; 
    cout << hex << x; 
    return b; 
} 

問題:私は、ファイル、EXAMPLE.SQLの最初のバイトを読んで、次のしている最初のバイトが08で表現されている場合は、確かに私は8の出力を得る。しかし、バイトが表現されている場合私は、そのバイトも09でない限り、私は次のバイトを取得するように見えた。私の問題は、09でASCIIで表現されている場合にのみわからない。

質問:ファイルから最初の(または3番目またはそれ以上の)バイトを読み込み、そのバイトのASCII値でintを作る方法は?

(私はWindows XPにあります)

+0

あなただけ読んでいないのはなぜ'char'に入れますか? –

+0

軌道上の@ Lightness Races:コメントありがとう。私はcharを読み込もうとしていましたが、各文字のascii値にしたいのですが、値が09のときは値0が返されていました。(意味があれば) – Thomas

答えて

3

これで解決します。

myFile >> noskipws >> b; 
2

は読んifstream::read代わりのoperator>>を使用してみてください。これは私のために働いています:提案の

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main(){ 
    unsigned int x; 
    unsigned char b; 
    ifstream myFile ("example.txt", ios::out | ios::binary); 
    myFile.seekg (0, ios::beg); 
    myFile.read(reinterpret_cast<char*>(&b), sizeof(b)); 
    x = (unsigned int)b; 
    cout << hex << x; 
    return b; 
} 
3

カップル:ファイルが実際に開かれている場合

  • チェック。そうでない場合は、ファイルが現在のディレクトリにあることを確認するか、完全パスを指定します。
  • おそらくios::inios::outではない)が必要です。
  • 実際に空白をスキップしない限り、noskipwsを使用してください。
  • 文字を返す目的は何ですか?大会はinterpret a non-zero exit code as a failureです(ただし、これに厳しい基準はありません)。

次のプログラムは、第四文字を読み、私のためにうまくそのHEX値を出力します。

#include <iostream> 
#include <fstream> 
#include <stdlib.h> 

using namespace std; 

int main() { 

    ifstream myFile("<path>\\example.txt", ios::in | ios::binary); 

    if (myFile) { 

     unsigned char b; 
     myFile.seekg(3) >> noskipws >> b; 

     if (myFile) { // File was long enough? 
      unsigned int x = b; 
      cout << hex << x; 
      return EXIT_SUCCESS; 
     } 

    } 

    return EXIT_FAILURE; 

} 

(。実際のパスで<path>を交換してください)

+0

ありがとうございます。 noskipwsの解決策が私のために働いた。キャラクターを返すことは、私が物事で遊んでいた時からの過ちだった。なぜ私はファイルから読み込みたいときにios :: outの代わりにios :: outを使うべきですか? (あなたは既に私がC++を初めて使ったことに気づいたかもしれません) – Thomas

+1

@ThomasMファイルから「入力」したいので、「出力」しません。 –

+0

あなたは正しいです!私はそれを誤解していた。ありがとう!私はなぜそれが動作するのだろう... – Thomas

関連する問題