🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
ASCII

ASCIIは、米国規格協会(ANSI)が制定したコンピューターの情報交換のための文字コードの一つ。アルファベットや数字などを1文字当たり7ビットで表します。英数字を表示する文字コードの中で最も高い互換性を持ち、多くの通信機器に利用されています。

C#

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

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

Q&A

解決済

2回答

2572閲覧

jpgファイルのASCII文字列変換

ka-zoo

総合スコア6

ASCII

ASCIIは、米国規格協会(ANSI)が制定したコンピューターの情報交換のための文字コードの一つ。アルファベットや数字などを1文字当たり7ビットで表します。英数字を表示する文字コードの中で最も高い互換性を持ち、多くの通信機器に利用されています。

C#

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

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

0グッド

0クリップ

投稿2019/10/08 04:51

▪️やりたいこと
jpgファイルを変換し対向機に送信、再描画

image---byte---ascii--送信--ascii--byte--image再描画

対向機へ送信する際にASCII文字列しか受け付けない為この様な処理が必要となっています。

・試したこと
現在、同一コード内で変換し再描画の処理を行っていますがbyte--imageに変換する際に例外が発生し描画出来ない状態です。

       Image image = System.Drawing.Image.FromFile(filename + ".jpg"); //image to byte byte[] b = ImageToByteArray(image); ////byte to ascii string text = System.Text.Encoding.ASCII.GetString(b); //// //// ////ascii to byte byte[] data = System.Text.Encoding.ASCII.GetBytes(text); //byte to img Image DrawIMG = ByteArrayToImage(data);
private byte[] ImageToByteArray(Image img) { ImageConverter imgconv = new ImageConverter(); byte[] b = (byte[])imgconv.ConvertTo(img, typeof(byte[])); return b; } private Image ByteArrayToImage(byte[] b) { ImageConverter imgconv = new ImageConverter(); Image img = (Image)imgconv.ConvertFrom(b);←この部分で例外発生 return img; }

▪️わからないこと
ascii変換の処理を省いた場合(image--byte--image)は正常に描画出来ました。

・エラーコード
System.ArgumentException: '使用されたパラメーターが有効ではありません

ASCII変換を行う処理が間違っているのか、別変換方法を検討するべきなのか
申し訳ございませんが、アドバイスお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ASCII に含まれていないデータが含まれているので扱えません。Base64 を使ってください。

投稿2019/10/08 04:57

Zuishin

総合スコア28669

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

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

Zuishin

2019/10/08 05:01

https://ja.wikipedia.org/wiki/ASCII > ASCIIは、7桁の2進数で表すことのできる整数の数値のそれぞれに、大小のラテン文字や数字、英文でよく使われる約物などを割り当てた文字コードである。 つまり、7 桁の 2 進数で表すことのできないデータをデコードしようとしているために起こる例外です。 https://ja.wikipedia.org/wiki/Base64 > Base64は、データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式である。 つまり、ASCII で扱えないデータを扱えるデータに変換するための方式です。
Zuishin

2019/10/08 05:04

バイト列を Base64 に直すには Convert.ToBase64String を使います。 その逆は Convert.FromBase64String です。
guest

0

たぶん、byte->ascii もしくは ascii->byte の変換のプログラムに問題がある。

 対応策: Base64方式で、byteとasciiの間の変換を行う。(Base64は長年にわたって使われている方式で、変換用アプリなどがネット上に多く公開されている)

投稿2019/10/08 05:00

coco_bauer

総合スコア6915

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問