VB.NET で、文字列をバイト数指定でぶった切る

あと、VB.NET で「え?こんな面倒なことしないといかんの?」という話だと、「バイト数での文字列の分割」かなあ。

「全角文字を途中でぶった切ってしまうことは在り得ない」という条件での処理なので、「文字列の最後が『全角文字の前半分の1byte』じゃないか?」みたいなややこしいチェックはしないでいい。だから、純粋に「byte 数で文字列を分割できる split や substr」みたいなのがあれば嬉しかったんだけど、無いのね、そんなの(^^;
ちゃんと「byte 数」じゃなく「文字数」としてアレコレ処理してくれるようで、有難迷惑だなあ(^^;

今回は、

'わたしは慎吾   00100100'
'あの子はチンコ 00001110'
'あたいは茜     00101011'

みたいなデータ(固定長)を、15byte と 8byte にぶった切りたいだけ。
例えば、「わたしは慎吾   」と「00100100」という具合に。

あれこれ試して、

Dim bytes() As Byte = System.Text.Encoding.GetEncoding("Shift_JIS").GetBytes(hogehoge)
Dim byteF() As Byte = CType(Array.CreateInstance(GetType(Byte), 15), Byte())
Dim byteR() As Byte = CType(Array.CreateInstance(GetType(Byte), 8), Byte())
Array.Copy(bytes, 0, byteF, 0, 15)  ' 1~15byte
Array.Copy(bytes, 15, byteR, 0, 8)   ' 16~23byte
Dim strF As String = System.Text.Encoding.GetEncoding("Shift_JIS").GetString(byteF)
Dim strR As String = System.Text.Encoding.GetEncoding("Shift_JIS").GetString(byteR)

※hogehoge に「わたしは慎吾   00100100」のような文字列が入っている。

とかしたんだけど、上に書いたように「全角コードを跨ぐことはない」ので「全角コードである」ということを意識する必要もないのに、なんか、Shift_JIS エンコードしてからバイト文字列に分割したりと面倒臭いことこの上無い。

もっとスマートな方法があると思うので、ぜひ、VB.NET マスターの方はコメントを!!(笑)

トラックバック(0)

このブログ記事を参照しているブログ一覧: VB.NET で、文字列をバイト数指定でぶった切る

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/3090

コメントする

このブログ記事について

このページは、shinodaが2014年9月 3日 22:09に書いたブログ記事です。

ひとつ前のブログ記事は「RowFilter で日時を条件に DataView から行選択・・・でハマった(^^;」です。

次のブログ記事は「「でんすけ」は予想に反して小綺麗なおでん屋であった」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら