人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ゼロは省略、フィールド省略にて記述されたIPv6のアドレスを
XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXXの
非省略形式にて変換するプログラムを教えてください。言語はC/C++/Java/JavaScriptが希望ですが、他のものでもかまいません。
※IPv4互換形式は無視していただいて結構です。
http://docs.hp.com/ja/B2355-90828/ch02s02.html

●質問者: peugeot
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:C/C++ IPv4 IPv6 Java JavaScript
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● aki73ix
●100ポイント

http://nifberry.727.net/test/hatena115.lzh

strにフィールド省略形式のIPv6を入れると

strに非省略形式で入ります

サンプルもつけたのでごらん下さい

int field[8],i,j,p,error=0,ryaku=-1,ryaku2=0,ryakuend=0;

/*初期化*/

for(i=0;i<8;i++)field[i]=0;

for(i=p=0;i<8&&str[p];p++){

if(str[p]==’:’){

/*省略部分の処理*/

if(str[p+1]==’:’){

ryaku2++;

if(ryaku==-1)ryaku=i+(p>0?1:0);

/*省略部分は1箇所にまとまって無くてはいけない*/

if(ryakuend==2)error|=2;

ryakuend=1;

}

else if(ryakuend==1)ryakuend=2;

i++;

}

/*16進数の処理*/

else if(str[p]<=’9’&&str[p]>=’0’){

field[i]=field[i]*16+str[p]-’0’;

if(field[i]>0xffff)error|=8;

}

else if((str[p]|’ ’)<=’f’&&(str[p]|’ ’)>=’a’){

field[i]=field[i]*16+(str[p]|’ ’)-’a’+10;

if(field[i]>0xffff)error|=8;

}

/*不正な文字*/

else if((unsigned char)str[p]>0x20){

error|=1;

}

}

/*省略の修復*/

if(ryaku!=-1){

ryaku2=8-i;

if(ryaku2>1)for(j=0;j<8-(ryaku+ryaku2);j++){

field[7-j]=field[8-j-ryaku2];

}

for(j=0;j<ryaku2;j++){

field[ryaku+j]=0;

}

}

if(i<7&&ryaku2==0)error|=4;

/*変換処理*/

wsprintf(str,”%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x”,field[0],field[1],field[2],field[3],field[4],field[5],field[6],field[7]);

◎質問者からの返答

ばっちりです!ありがとうございます!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ