トップページ > 記事閲覧
IPDATA_IPv6について
名前:Tir 日時: 2017/07/23 12:05

毎度お世話になります。 おかげさまで通信部分が上手く行ったので僕の環境では対応してないのですがIPv6に対応しようと思い ループバックアドレスでテストしたのですがIPDATA_IPv6の仕様が分かりません 最初にIPv6のループバックアドレスを入力して試そうと思い IPDATA_IPv6::Byteの末尾Byte[15]に直接1を代入したところ成功したのですが 今度は入力機能を付け0000:0000:0000:0000:0000:0000:0000:0001と入力して :の部分で分割し16進数から10進数に変換後IPDATA_IPv6::Wordに格納するとしたのですが成功しませんでした。 調べてみたところByte[15]に1を代入した場合IPDATA_IPv6::Word[7]に256が代入されていました。 なのでループバックアドレスを入力する場合0000:0000:0000:0000:0000:0000:0000:0100と入力しなければいけません どのようにすれば正しく格納されるようになるのでしょうか?
メンテ

Page: 1 |

Re: IPDATA_IPv6について ( No.1 )
名前:管理人 日時:2017/07/24 00:02

すみません、Windows環境はリトルエンディアンなので IPDATA_IPv6 の Word では 直感的な使い方ができないことに今気付きました 例えば Word に Word[ 0 ] = 0x0123 ; Word[ 1 ] = 0x4567 ; と値を代入することと同じことを Byte への代入で表現する場合 Byte[ 0 ] = 0x23 ; Byte[ 1 ] = 0x01 ; Byte[ 2 ] = 0x67 ; Byte[ 3 ] = 0x45 ; となります ( リトルエンディアンは下位桁がメモリの若い番号のアドレスに格納される為です、  詳しくは『バイトオーダー リトルエンディアン』などのキーワードでウェブ検索してみてください ) なので、お手数で申し訳ありませんが入力機能で Word に代入した後、ConnectNetWork_IPv6 などの関数に 渡す前に以下の処理を行い、Word 配列の各要素の上位8ビットと下位8ビットを逆転する処理を行ってください m(_ _;m int i ; for( i = 0 ; i < 8 ; i ++ ) { ipv6.Word[ i ] = ( unsigned short )( ( ipv6.Word[ i ] >> 8 ) | ( ipv6.Word[ i ] << 8 ) ) ; }
メンテ
Re: IPDATA_IPv6について ( No.2 )
名前:Tir(解決) 日時:2017/07/24 00:46

解答ありがとうございます。 Byte[15]に1を代入して256が代入された時に逆になっているのかな? と思ったらその通りだったんですね。無事に自分に接続することが出来ました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存