C/C++ printf で 16 進数のテキスト データを入力すると、多くの ffffff 問題が発生する

問題の説明:プログラミング プロセス中に、ファイル (形式は次の図 1 に示されています) から 16 進形式でデータを読み取り、それをメモリ (char buf [MAX_SIZE]) に保存する必要があるという要件に遭遇しました。ただし、読み取りデータをテストし、printf("%02x",buf); を使用してデータを出力すると、奇妙な問題が発生しました: 各バイトの上位 4 ビットの値が 8 より大きい場合は常に、このバイトが出力されます。値の前にあると、複数の ffffff が突然偽装されます (結果については図 2 を参照)。


図1 入力ファイルのデータ形式


 図2 出力データフォーマット    

図 1 と図 2 を比較すると、上位 4 ビット値が 8 より大きい場合、各バイトの前にさらにいくつかの f があることがわかります。

私の出力コードは次のとおりです。

	int rsize;
	char buf[MAX_SIZE];        //问题的始作俑者*****
	rsize = fread(buf,sizeof(char),filesize,fp);
	if (rsize < 0)
	{
		printf("Failed to read file .\n");
	}

	buf[rsize] = '\0';

        int i ;
        for ( i = 0; i < rsize; ++i)
        {
    	  if ((i%16) == 0 )
    	  {
    		printf("\n");
    	  }

    	  printf("%02x ",buf[i]);
      }

この出現の原因は何ですか? printf を使用して文字列を 16 進数形式で出力する場合、歪んだ結果については   ここで説明しますが、要するに、出力時に printf("%02x",buf); がオーバーフローするということです。データを格納するbufをunsigned char buf[MAX_SIZE)に変更すると問題は解決します。



おすすめ

転載: blog.csdn.net/zdsx1104/article/details/34405693