【Excel(64bit) VBA】【Winsock API】ポート番号(u-short型)をVBAで扱う方法とその検証

ポート番号、winsockではu-short(16bit 符号なし整数 0 – 65535)で扱うことになっているが、VBA上では、u-shortが存在しない。

同じサイズのintegerを使うコードをよく見かけるが、どうもその理屈がわからなかったのでサンプルプログラムで検証してみた。

検証用サンプルプログラム

検証結果

  • 外部IF等からプログラムレベル(例えば引数)でポート番号を扱うにはLong型(32bit)しかない。
  • Long型(32bit)では、そのままポート番号として使えない(htons/ntohsの引数の型にあわない)ためInteger型(16bit)を使わざるおえない。
  • ただしInteger型(16bit)は符号なし整数しかなく、符号なし(Unsigned)のバリエーションがない。
  • そのため、32767以上のポート番号をそのまま変数に代入できない、マイナス符号も計算したbitレベルのはめ込みが必要になる。              処理例:Convert_u_short_PortNumber
  • そして、無理にはめ込んだことで、ポート番号の指定値を見るための変換関数も必要になる。                             処理例:u_short_PortNumberToLong

他サイトのサンプルプログラムでも似たようなコードを見るので、皆さんいろいろ苦労(工夫)されているのだろう。

コメント

タイトルとURLをコピーしました