電気ウナギ的○○

About Home

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

shinoda (2014年9月 3日 22:09)
あと、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 マスターの方はコメントを!!(笑)

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/3090

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE