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

C言語のソースを書いてください。インターネットのPrefix(例えば192.68.8/24)をint[A][B]のように記述したいです。Aは「/」の前半部分。Bは「/」の後半(Prefix長)です。ソースそのものずばりを回答してください。

●質問者: labtest
●カテゴリ:コンピュータ インターネット
✍キーワード:24 C言語 インターネット ソース 記述
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● taka-hr
●60ポイント

なにか問題設定が間違っている気がします。

int[A][B] と書きたいと言われても、C言語に型名 + 添え字という構文がありません。

int var[A][B]; と定義しておいて、var[a][b] という形の式で得られるのは int 型の値ですが。

var[192.68.8][24] と書きたいという意味ならそんなのC言語では無理ということになります。

---- ---- ---- ---- ---- ---- ---- ---- ----

x = var[0][24]; y = var[1][24] としたときに x = 192, y = 68 になるようにすることはできないこともないですが、こんなの使い道あるんでしょうか。単なる宿題?

で、このとき z = var[0][23] はなんになるのが正しいでしょう?


超解釈で書いてみたソースはこんな感じですが、問題を書き間違えている可能性が高いんじゃないかとは思いますのでもう一回問題を確認してください。。

#include <assert.h>

void generate_networks(int addr[4], int networks[4][33])

{

int i, j;

unsigned int mask;

unsigned int work;

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

mask = 0xffffffffU ^ ((1U << (32-j)) - 1);

for (i = 0; i < 4; i++) {

networks[i][j] = addr[i] & (mask >> (3 - i) * 8) & 0xff;

}

}

}

int main()

{

int addr[4] = {192, 68, 8, 0};

int networks[4][33];

generate_networks(addr, networks);

assert(networks[0][24] == 192);

assert(networks[1][24] == 68);

assert(networks[2][24] == 8);

assert(networks[0][16] == 192);

assert(networks[1][16] == 68);

assert(networks[2][16] == 0);

assert(networks[0][12] == 192);

assert(networks[1][12] == 64);

assert(networks[2][12] == 0);

return 0;

}

◎質問者からの返答

すみません。間違い&説明不足でした。回答の受付を一時停止しもう一度質問し直します。

関連質問


●質問をもっと探す●



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