« 11.15 あの教授が!! | ココ | 11.16 ヌーヴォー到着 »
2006年11月15日
ntohl() .NET Edition
必要があって、XMLのBase64エンコードテキストを32ビット数値の配列に変換しなければならなくなってしまって…。
Cの関数ではネットワークバイト配列(ビッグエンディアン)をWindows(x86)系バイト配列(リトルエンディアン)に変換する関数としてntohl()などがあるのだけれども、VB.netから呼び出すとなると、例のDllImport宣言をしなければならない。…そんな面倒なことしなくても絶対ライブラリにあるはずだ!! と、探した挙句…見つかった。けど、これじゃ名前が全然違って見当が付かないって。
- Net.IPAddress.NetworkToHostOrder()
がその関数なんやけども、引数として受け取ることができるのが16/32/64ビット整数値型。バイト配列を変換したいんやけど。MemoryStreamとかBinaryReader/Writerを使ってやらんとあかんのかなぁと複雑なこと考えてたけど、BitConverterなんていう便利なクラスを発見。
- BitConverter.GetBytes()
- BitConverter.ToInt32()
これで、バイト配列を整数値に変換し、その整数値のバイト配列を変換、バイト配列に戻す、ということが可能に。
' Base64デコード法その2
Dim txt2 As String = xmlnode.InnerText
Dim b2() As Byte
b2 = Convert.FromBase64String(txt2)Dim arr As New ArrayList
For n As Integer = 0 To (b2.Length \ 4) - 1
Dim i As Integer = BitConverter.ToInt32(b2, n * 4)
Dim i2 As Integer = Net.IPAddress.NetworkToHostOrder(i)
Dim b3() As Byte = BitConverter.GetBytes(i2)
Dim s1 As Single = BitConverter.ToSingle(b3, 0)
arr.Add(s1)
Next
このコードでは、ついでに(単精度)浮動小数点型に変換してみた。
By ただ at 12:24 カテゴリー ; さんぷるライブラリー , PinMarch Samples , VB, VB .net , プログラミング単語帳
« 11.15 あの教授が!! |
11月の記事
| 11.16 ヌーヴォー到着 »
トラックバック
このエントリーのトラックバックURL:
http://pinmarch.sakura.ne.jp/mt/mt-tb.cgi/708
このリストは、次のエントリーを参照しています: ntohl() .NET Edition:
OpenFileDialog1.FilterIndex = FreeFile() If OpenFileDialog1.ShowDialog() = Dialo...
トラックバック時刻: 2007年2月 3日 10:21