- PR -

多次元配列のbyte配列をString型にしたい

投稿者投稿内容
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2007-10-29 14:27
お世話になります。
VS2005のC#での質問をさせてください。


byte配列に格納したデータを文字列に変換する場合は、
通常はこのようにすると思います。

string test = sjisEnc.GetString(byteList);

このとき、byteListが多次元配列だった場合、
文字列に変換するにはどうすればよいのでしょうか?

例えばbyteListに次のようにデータが格納されていたとします。

byteList[0,1] = 1;
byteList[0,2] = 2;
byteList[1,1] = 3;
byteList[2,2] = 4;

このとき、

string test = sjisEnc.GetString(byteList[0]);

とすると、
「インデックス数が正しくありません」
「byteからbyte[]に変換できません」
と表示されエラーとなります。

お手数ですが、ご回答よろしくお願いいたします。

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-10-29 15:11
そのように使うなら、byte[,] じゃなくて byte[][] ですかね。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-10-29 15:23
ですね。 「ジャグ配列」 あたりで調べると違いはわかると思いますが、[i, j] の形式は 「多次元配列」、[i][j] の形式は配列の配列 (この場合は byte 型の配列である byte[] のさらに配列 byte[][]) であり、多次元配列ではなく 「多段階配列」 と呼ばれます。 最近は多次元配列は一般的ではなくなってきていますね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2007-10-29 15:48
ご回答ありがとうございます。
「ジャグ配列」というのは初めて聞きました。
勉強になりました。

ところが、べるさんにご提示いただいた多段階配列に変えてみたところ、
ビルドは問題なく終わるのですが、配列にバイナリを代入する際に
エラーとなって処理が中断してしまうようになりました。

具体的に言いますと、今までは、

byteList[0, 1] = 0xFF;

というように、この配列のなかにバイナリを入力しても
エラーとはならなかったのですが、
多段階配列にしたところ、

byteList[0][1] = 0xFF;

という処理の箇所で中断してしまいます。
もしかすると今までが強引なやり方をしていたのかもしれませんが、
解決方法等ありましたら、ご教授いただけませんでしょうか。

よろしくお願いいたします。
_________________
◇◇◇ 社内SEを兼務する文系プログラマです。
◇◇◇ WinXP VisualStudio2005(C#メイン) MS・SQLServer とかを使っています。
◇◇◇ 周囲にプログラマがいないので、みなさんだけが頼りですヽ(`Д´;ノ
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2007-10-29 15:57
「エラーとなって処理が中断」されるなら、そのエラーがどんなエラーなのか認識しないと解決が困難のは自明だと思うのですが。

ジャグ配列 (C#)を読めば解決する問題だと推測しますけど。
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2007-10-29 16:24
「NullReferenceExceptionはハンドルされませんでした。
 オブジェクト参照がオブジェクト インスタンスに設定されていません。」
というエラーが出ます。

変数byteListは

byte[][] byteList = new byte[2][];

とやって定義していますが、この定義の仕方が間違ってるのでしょうか?

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-10-29 16:53
いや、あってますよ。けどその時点で byteList[0] に何も入ってない(null)ですよね。
そこにbyte配列を(newとかして)入れてあげないと byteList[0][1] は使えません。
Wingard
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 168
お住まい・勤務地: 頭の中はファンタージェン
投稿日時: 2007-10-29 17:23
すみません、調べてみたんですがよくわかりません。

前述のように、byteList[0][1]に0xFFを入れるには、
具体的にどうすれば良いのでしょうか?

スキルアップ/キャリアアップ(JOB@IT)