none
請教BinaryWriter輸出char資料為什麼每筆會多出3個0x00呢? RRS feed

  • 問題

  •  

    我的程式大概如下:

    System::IO::BinaryWriter^ twBWriter;
    System::IO:Tongue Tiedtream^ twStream;

     

    twStream = System::IO::File:Surprisepen(fileName,System::IO::FileMode::CreateNew,System::IO::FileAccess::Write);
    twBWriter = gcnew System::IO::BinaryWriter(twStream);

     

    twBWriter->Write('1');
    twBWriter->Write('2');
    twBWriter->Write('3');
    twBWriter->Write('4');
    twBWriter->Write('5');
    twBWriter->Write('6');
    twBWriter->Write('7');
    twBWriter->Write('8');
    twBWriter->Write('9');
    twBWriter->Write('0');

     

    twBWriter->Close();
    twStream->Close();

     

    我預期輸出的結果應該是:

    31 32 33 34 35 36 37 38 39 30

    但是結果卻是

    31 00 00 00 32 00 00 00 33 00 00 00 34 00 00 00 35 00 00 00 36 00 00 00 37 00 00 00 38 00 00 00 39 00 00 00 30 00 00 00

    每次輸出後面都會多出三個0x00,請教我是有哪邊需要修改呢?

    謝謝各位的幫忙~~

    2007年9月15日 上午 03:55

解答

所有回覆

  • HI,

     

    您指的是檔案的內容嗎? 我照您的程式做, 輸出到檔案的內容為:

     

    1   2   3   4   5   6   7   8   9   0  

     

    很正常啊!

     

    tihs

    2007年9月16日 上午 02:44
  • .Net 預設是用 Unicode ,所以直接輸出也是這個值。

     

    你要輸出 ANSI 格式的話,請用 Encoding 轉成 Byte 陣列再輸出。

     

    你可以使用 Encoding.Default 轉,或是用 Encoding.GetEncoding("big5") 來轉,請依據你目前的字串決定你該選哪樣,包含 utf8 也可以,但選哪樣會影響到遠東語系是否能正常轉入。

     

    2007年9月16日 上午 03:38
    版主
  • 我將程式開啟bitwriter的部份改成

    twBWriter = gcnew System::IO::BinaryWriter(twStream,System::Text::Encoding::ASCII);

    輸出結果仍然是

    1[NUL][NUL][NUL]2[NUL][NUL][NUL]3[NUL][NUL][NUL]........

    請問我這樣修改編碼方式是正確的嗎?

    2007年9月17日 上午 12:16
  • 我希望輸出的結果是1234567890,中間不要有插入任何的空白或是符號,因為這樣會讓原本的檔案變成四倍大,而且我在後續的資料處理上也需要額外處理這些多餘的字元,不知道您有沒有什麼好點子呢?

     

    2007年9月17日 上午 02:30
  • 如果不嫌棄看 VB 的話,我是這樣做:

    MySaveBinaryFile(StringToBytes("1234567890", enuStandardCodePages.SCP_big5), filename)

     

    MySaveBinaryFile
    http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Function&Module=16&Function=213

    StringToBytes
    http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Function&Module=6&Function=56

    2007年9月17日 上午 03:05
    版主