C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

テキスト変換方法


(過去ログ 6 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■6559 / inTopicNo.1)  テキスト変換方法
  
□投稿者/ ヒロ 二等兵(1回)-(2006/09/16(Sat) 13:39:52)

分類:[C#] 


分類:[C#] 

バイナリファイルのデータを読み込み、テキスト形式のファイルに落としたいのですが上手くいきません。言語はC#です。

FileStreamでバイナリファイルのデータをバイト配列に落として、シフトJISにエンコードし、string型に直してからStreamWriterを使用して書き込んでるのですが、、、
その書き込んだファイルをメモ帳で開いても文字化けしたままです。

理想としては
バイナリファイルの中身が「01-01-15-03」だったらそのまま「01011503」ってテキストに表示されたいです


どなたか教えてください。
よろしくお願いします。

0
引用返信 編集キー/
■6560 / inTopicNo.2)  Re[1]: テキスト変換方法
□投稿者/ Hongliang 曹長(91回)-(2006/09/16(Sat) 14:25:24)
Hongliang さんの Web サイト

分類:[C#] 

> FileStreamでバイナリファイルのデータをバイト配列に落として、シフトJISにエンコードし、string型に直してからStreamWriterを使用して書き込んでるのですが、、、
> バイナリファイルの中身が「01-01-15-03」だったらそのまま「01011503」ってテキストに表示されたいです

エンコードってのは { 0x82, 0xA0 } のデータを "82A0" と変換する事ではありません。{ 0x82, 0xA0 } のデータを(Shift_JIS なら)"あ" と変換する事です。

バイト配列を 16 進文字列にするには、BitConverter を使うと楽です。

0
引用返信 編集キー/
■6561 / inTopicNo.3)  Re[1]: テキスト変換方法
□投稿者/ επιστημη 准尉(106回)-(2006/09/16(Sat) 14:26:47)
επιστημη さんの Web サイト

分類:[C#] 

あくまで一例:

byte[] input = ファイルから読んだバイト列;
string hex = "0123456789ABCDE";
StringBuilder builder = new StringBuilder();
foreach ( byte b in input ) {
builder.Append(hex[b/16]);
builder.Append(hex[b%16]);
}
string output = builder.ToString();

で、このoutputをファイルに書く。


0
引用返信 編集キー/
■6563 / inTopicNo.4)  Re[2]: テキスト変換方法
□投稿者/ επιστημη 准尉(107回)-(2006/09/16(Sat) 18:41:50)
επιστημη さんの Web サイト

分類:[C#] 

ちゃちゃっと書いてみた。どってことなく動くぞ。

class Program {
static void Main(string[] args) {
FileStream istream = new FileStream(args[0], FileMode.Open);
StreamWriter ostream = new StreamWriter(args[1]);
int ch;
string hex = "0123456789ABCDE";
while ( (ch = istream.ReadByte()) >= 0 ) {
ostream.Write(hex[ch/16]);
ostream.Write(hex[ch%16]);
}
istream.Close();
ostream.Close();
}
}


0
引用返信 編集キー/
■6565 / inTopicNo.5)  Re[3]: テキスト変換方法
□投稿者/ だく 二等兵(1回)-(2006/09/16(Sat) 21:30:22)

分類:[C#] 

byte型変数.ToString("X")ではダメですか?

0
引用返信 編集キー/
■6566 / inTopicNo.6)  Re[4]: テキスト変換方法
□投稿者/ επιστημη 准尉(108回)-(2006/09/16(Sat) 22:39:51)
επιστημη さんの Web サイト

分類:[C#] 

> byte型変数.ToString("X")ではダメですか?

1 を "01" と書いてくれないんじゃなかろか。


0
引用返信 編集キー/
■6567 / inTopicNo.7)  Re[5]: テキスト変換方法
□投稿者/ だく 二等兵(2回)-(2006/09/16(Sat) 23:30:39)

分類:[C#] 

>
> 1 を "01" と書いてくれないんじゃなかろか。
>

あ、そうですね。その場合は、

byte型変数.ToString("X").PadLeft(2, "0")

ですね。


0
引用返信 編集キー/
■6568 / inTopicNo.8)  Re[6]: テキスト変換方法
□投稿者/ だく 二等兵(5回)-(2006/09/17(Sun) 00:30:42)

分類:[C#] 

試してみると、BitConverterで変換するのが一番早いですね。

BitConverter.ToString(byte配列).Replace("-", "")

まあ当然ですね。。

0
引用返信 編集キー/
■6569 / inTopicNo.9)  Re[7]: テキスト変換方法
□投稿者/ ヒロ 二等兵(2回)-(2006/09/17(Sun) 01:41:33)

分類:[C#] 

2006/09/18(Mon) 00:56:17 編集(投稿者)
2006/09/18(Mon) 00:56:10 編集(投稿者)

なんとかできました。

BitConverterは気付きませんでしたね、、、、

皆さんありがとうございました!!!



解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -