質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

3942閲覧

テキストファイルからバイト配列に変換したい

dendenmushi

総合スコア98

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/09/07 14:47

編集2018/09/09 02:08

前提・実現したいこと

C#
ArrayListをbyte[]に変換したい。
Listのobjectとして変換はでき、以下サイトを参考に記述したのですがうまくいきませんでした。

発生している問題・エラーメッセージ

![イメージ説明

objを確認したところbyte配列の中はからっぽのようでした。
イメージ説明

以下のサイトを参考に記述したのですがうまくいきませんでした。
リンク内容

アドバイスどうかよろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

OS:windows10
Visual Studio 2017

###周辺コード追記

C#

1 //local textファイル読み込み 2 public static byte[] Text_Reading_Method() 3 { 4 5 string line; 6 //byte[] line; 7 ArrayList al = new ArrayList(); 8 9 using (StreamReader sr = new StreamReader( 10 "C:\work\Process.txt", Encoding.GetEncoding("Shift_JIS"))) 11 { 12 13 while ((line = sr.ReadLine()) != null) 14 { 15 //line.Replace("\"", ""); 16 al.Add(line); 17 } 18 } 19 20 //ArrayListをListへ変換 21 List<string> lst1 = al.Cast<string>().ToList(); 22 23 byte[] obj = lst1.Select(s => byte.Parse(s)).ToArray();

###Process.txtの中身
10001001
01010000
01001110
01000111
00001101
00001010
00011010
00001010
00000000
00000000
00000000
00001101
01001001
01001000
01000100
01010010
00000000
00000000
00000000
00011011
00000000
00000000
00000000
00011110
00001000
00000010
00000000
00000000
00000000
01010010
01111011
11110010
10110001
00000000
00000000
00000000
00000001
01110011
01010010
01000111
01000010
00000000
10101110
11001110
00011100
11101001
00000000
00000000
00000000
00000100
01100111
01000001
01001101
01000001
00000000
00000000
10110001
10001111
00001011
11111100
01100001
00000101
00000000
00000000
00000000
00001001
01110000
01001000
01011001
01110011
00000000
00000000
00001110
11000011
00000000
00000000
00001110
11000011
00000001
11000111
01101111
10101000
01100100
00000000
00000000
00000000
01010000
01001001
01000100
01000001
01010100
01001000
01001011
11101101
11001100
01000001
00001010
00000000
00100000
00001000
01000100
11010001
11101110
01111111
01101001
10010011
01110010
00010001
10100010
01011001
00110000
01000101
10010000
01101111
10010101
01101000
10111111
00010000
01011010
00010110
00110001
10110010
10001000
01100001
00010111
10001011
01000011
11010110
01010011
01101110
01010001
01011110
00000011
01111100
10010001
10101101
01000100
01101111
00010101
10011001
11111001
11111001
10000111
01100010
00100111
01110011
10100011
01000110
01010011
01110000
01110001
10100100
10101000
11001000
11000010
00010111
01011111
11101100
11001010
00100010
01000110
00010110
00110001
11011110
00101111
00010010
01010101
10000000
10001000
00010101
01101010
11011000
11001101
10110101
11000010
00000000
00000000
00000000
00000000
01001001
01000101
01001110
01000100
10101110
01000010
01100000
10000010

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/09/07 15:02

ArrayListのナカミは何でしょう。また、byte[]に変換してなにをするんでしょうか
dendenmushi

2018/09/07 15:19

ArryaListの中身はstringです。byte[]に変換してImageに変換しようと考えています。 ImageConverter imgconv = new ImageConverter(); Image img = (Image)imgconv.ConvertFrom(byte);
Zuishin

2018/09/08 01:12

Process.txt の中身を見せてください。多分コードは全部書き換えることになると思います。
Zuishin

2018/09/08 01:13

それと、ArrayList は使いません。不要ですのでタイトルは「テキストファイルからバイト配列を作りたい」が適当かと。
dendenmushi

2018/09/09 02:05

すいませんお返事遅れました。今確認しました。ArrayListは使わないのですね。ありがとうございます。ArrayListから~byte[]に変える のタイトル変えておきます。
dendenmushi

2018/09/09 02:07

投稿したはずなのにまたされていない…。お返事遅れてすいませんでした。そうなのですね。ArrayList使わないのですね。タイトル変えておきます。ArrayListからbyte[]に変える方法→テキストファイルからバイト配列を作りたい ありがとうございました。
guest

回答2

0

ベストアンサー

画像から2進数?にできましたが、2進数から画像に変換する簡単な方法 の hozon.txt が対象と仮定して回答します。
次のようにしてください。

C#

1using System; 2using System.IO; 3using System.Linq; 4 5namespace ConsoleApp1 6{ 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 if (args.Length == 0) 12 { 13 throw new ArgumentException("ファイル名を指定してください"); 14 } 15 var obj = File 16 .ReadLines(args[0]) // ファイルから文字列を読み込む 17 .Select(a => Convert.ToByte(a, 2)) // 読み込んだ文字列を二進数として byte に変換 18 .ToArray(); // 配列にする 19 Console.ReadKey(); 20 } 21 } 22}

ArrayList はレガシーなクラスです。
現在は使うことはありません。

投稿2018/09/08 01:32

編集2018/09/08 01:37
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dendenmushi

2018/09/09 02:15

回答ありがとうございました。また投稿できていないおそれあるのでコメントしなおします。
guest

0

バイトの範囲内の数値を10進数の文字列にした配列がlst1に入ってるってことですか?

こんな感じ?

C#

1string[] al= {"100", "255", "10"};

その場合は

C#

1byte[] obj = lst1.Select(s => byte.Parse(s)).ToArray();

でいいと思いますが。

投稿2018/09/07 16:26

toki_td

総合スコア2850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dendenmushi

2018/09/07 17:01

回答ありがとうございます。 System.OverflowException Message=符号なしバイト型に対して値が大きすぎるか、または小さすぎます。というエラーが出てしまいました。 周辺コード追記します。
pepperleaf

2018/09/08 00:43

ArrayListに入っているデータが 255を越えている可能性があるという事ですね。(要素数でなく、個々のデータの数値) 読込み元のファイルに 255を越えた指定となっている行はありませんか?
toki_td

2018/09/08 04:00

中身がわかりませんがpepperleafさんの言われる通りデータに問題ありですね。 そのデータは本当に1行にbyteへの変換で正しいのでしょうか?
Zuishin

2018/09/08 05:10

前の質問から見ておそらく二進数です。 10000000 は二進数だと byte に収まりますが、十進数だと溢れます。
toki_td

2018/09/08 06:45

あぁ、なるほど、ではZuishinさんの回答の通りConvert.ToByteですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問