質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

4353閲覧

C#のstringの論理演算について

porepore

総合スコア15

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2016/08/14 15:58

お世話になります。
C#にてstringの論理演算についてお聞きしたいです。

現在ローカルマシンのIPアドレスとサブネットマスクを取得し、
それらからブロードキャストアドレスを計算するプログラムを作成しています。
しかし取得したアドレスがstringのため論理演算することができません。
そこでどのようにしたら良いかうまい方法をお聞きしたいです。

お手数ですが、何卒よろしくお願いいたします。

↓作成中のプログラムです。

C#

1class Program 2{ 3 static void Main(string[] args) 4 { 5 ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'"); 6 ManagementObjectCollection queryCollection = query.Get(); 7 foreach (ManagementObject mo in queryCollection) 8 { 9 string[] ip = (string[])mo["IPAddress"]; 10 string[] sub = (string[])mo["IPSubnet"]; 11 } 12 string broadcast = (~sub[0]) | ip[0]; 13 } 14} 15

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

BAが出てるので完全に蛇足となりますが・・・。

今回のように、

  • IPアドレスを扱った処理をしたい
  • 論理演算を行いたい

の場合についてはIPAddressクラスを用いた10進数表記法とバイト配列への相互変換
BitArrayクラスを用いた**論理和(Orメソッド)と排他論理和(Xorメソッド)**でもやりたいことを実現できるとかと思います。(BitArrayのコンストラクタにはバイト配列を渡す)。

ただしBitArrayから演算後のバイト配列を取得し直したりと多少記述が増えるデメリットはありますが。

またこちらのサイトは原文が英語なのと記事が少し旧いというのがありますが、
IPアドレス・サブネット絡みの処理をユーティリティ化している一例となってるのでご参考までにどうぞ。
(ソースだけでも参考になればよかとです・・・^^;)

投稿2016/08/15 14:05

編集2016/08/15 14:08
Panzer_vor

総合スコア1636

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

試してみてください。

C#

1using System; 2using System.Linq; 3using System.Management; 4using System.Net; 5 6static class Program 7{ 8 [STAThread] 9 static void Main() 10 { 11 ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'"); 12 ManagementObjectCollection queryCollection = query.Get(); 13 foreach (ManagementObject mo in queryCollection) 14 { 15 var ip = IPAddress.Parse(((string[])mo["IPAddress"])[0]).GetAddressBytes(); 16 var sub = IPAddress.Parse(((string[])mo["IPSubnet"])[0]).GetAddressBytes(); 17 Console.WriteLine(new IPAddress(ip.Select((b, i) => (byte)(b | (sub[i] ^ 255))).ToArray())); 18 } 19 Console.ReadLine(); 20 } 21}

投稿2016/08/14 22:25

編集2016/08/14 22:31
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

porepore

2016/08/15 08:00

ありがとうございました。 解決できました。
guest

0

string から int へ変換したいということでしょうか?

C#

1List<int> ip = new List<int>(); 2 3foreach(sting s in (string[])mo["IPAddress"]) 4{ 5 ip.Add(int.Parse(s, NumberStyles.HexNumber)); 6}

これでどうでしょうか。

投稿2016/08/14 17:08

mugicya

総合スコア1046

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

porepore

2016/08/15 08:00

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問