|
■No101872 (たかし さん) に返信
> あと1つお聞きしたいのですが
> nameの中身が 1文字とあと\0\0\0 か 2文字と\0\0 か 3文字と\0 の時があるのですが
> \0を取り除きたい時はどうしたらいいでしょうか
できた String に対して TrimEnd('\0') と呼んであげれば良いです。
name = name.TrimEnd('\0');
ところで。
> for (i = 0; i < 2; i++)
> {
> ushort number = ushort.Parse(resMsg);
> byte[] byteArray=BitConverter.GetBytes(number);
> Array.Reverse(byteArray);
> string str = Encoding.ASCII.GetString(byteArray);
> numb[i] = str;
> }
> string name = numb[0] + numb[1];
ループ内の ushort.Parse(resMsg) はこの例だと i が 0 でも 1 でも同じものを使ってしまっていそうですが、
この掲示板に差し障りない内容に書き直す際に間違えたということで良いですよね…?
あと、ASCII の間はこれでも支障なさそうですが、Shift_JIS などのマルチバイト文字列を扱うようになるなら、
毎回 GetString するのではなく、すべての byte 配列をつなげてから GetString する必要があります。
ご注意ください。
LINQ になじめばこういう感じにできるとは思います。
// 受信した文字列を想定したダミー
var resMsg = new string[2] { "16706", "17220" };
// 受信した文字列配列をLINQでushort→bytes→逆順並べ替えして1つのbyte配列に連結
var bytes = resMsg
.SelectMany(m => BitConverter.GetBytes(ushort.Parse(m)).Reverse())
.ToArray();
// byte配列をASCIIで文字列変換して、終端文字を削る
var result = Encoding.ASCII.GetString(bytes).TrimEnd('\0');
|