« 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:

» ファイル読込み from プログラマーズ雑録
OpenFileDialog1.FilterIndex = FreeFile() If OpenFileDialog1.ShowDialog() = Dialo...

トラックバック時刻: 2007年2月 3日 10:21