2012/08/27(Mon)Wake On Lan In C#

はてブ数 2012/08/27 23:59 プログラミング::C# つーさ

ある日のTwitterにて。

気まぐれにdevenvしておよそ10分後にできたものがこれだっ

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace WoL
{
  class Program
  {
    static void Main(string[] args)
    {
      // args[0] = "DE-AD-BE-EF-11-FE"
      new Action<string>(a=>new UdpClient(0).Send(Array.ConvertAll(("FF-FF-FF-FF-FF-FF-"+string.Join("-",new string[]{a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a})).Split('-'), s=>byte.Parse(s, NumberStyles.AllowHexSpecifier)),102,new IPEndPoint(0xFFFFFFFF, 9)))(args[0]);
    }
  }
}

設定など要らんっ

自分のマシンに対して使って動くことは確認した。
ほんとは140文字以内にしてツイートしたかった。

追記

解説した。

それを踏まえて上のコードを分解。

続きを読む

2012/08/04(Sat)漢字の読みを得るには C#版 - Marshalで遊ぼう

はてブ数 2012/08/04 4:58 プログラミング::C# つーさ

やってることは、かつてHSP3向けに作ったスクリと一緒。
C#ならどれだけ楽かと思って、COM Interopしてみたくなった。
やってみたら実はTypeLibがなくて全然楽じゃなかった。

"冬過ぎて春来るらし朝日さす春日の山に霞たなびく" から、
"ふゆすぎてはるらいるらしあさひさすかすがのやまにかすみたなびく" が得られる。
お、Win8では「かすがのやまに」になってる。が、「はるらいるらし」になってる。
うーん、相変わらずビミョーね。

続きを読む

2012/06/17(Sun)Jsonほぼ互換の似非バリアント的な何か。

はてブ数 2012/06/17 18:22 プログラミング::C# つーさ

似非バリアント もしくは、似非JSONオブジェクト。
Jsonパーサ・フォーマッタの独自実装ですはい。
ゲームとかのセーブデータをスキーマレスに読み書きしたいなという欲求があるからして。

    class VarTest
    {
        public static void TestVar()
        {
            Var v = new VarList {
                true,
                false,
                12345,
                "ほげ",
                new byte[]{0x1, 0x2, 3, 4, 5, },
                new VarDictionary() { 
                    {"あ", true}, 
                    {"い", false}, 
                    {"X", Var.Null}, 
                    {"Y", 123},
                    {"辞書", new VarDictionary() { 
                        {"あ", true}, {"い", false}, {"X", new Var()}, {"Y", 123}, 
                    } },
                    {"辞書内配列", new VarDictionary() { 
                        {"あ", new int[]{123,456 } }, 
                        {"い", new bool[]{true, true, false, false, true} }, 
                        {"X", new VarList { Var.Null, "えー", new byte[]{99, 99, 99}, } },
                        {"Y", new string[]{"う゛ぁ", "う゛ぃ",} },
                    } }
                },
                "にゃー",
            };

            int a = v[5]["辞書内配列"]["あ"][1]; // → 456
            string b = v[5]["辞書内配列"]["X"][1]; // → "えー"
            Console.WriteLine(a);
            Console.WriteLine(b);
            string serialized = v.ToFormattedString(); // JSON形式の文字列になる
            Console.WriteLine(serialized);
            Var readed = Var.FromFormattedString(serialized); // JSON形式の文字列から読み込む
            Console.WriteLine(readed.ToFormattedString()); // ちゃんと読み込めたか?
        }
    }

のような。
読み込み時に備えて、Nullとは別にundefindも定義しておくべきだったかしら。

続きを読む

2012/04/01(Sun)C# で BigInteger

はてブ数 2012/04/01 7:37 プログラミング::C# つーさ

とりあえず10進数で2300桁ぐらい扱える全然BigじゃないBigInt。負の値は扱えない。
256のとこを大きくしたら扱える桁数が増える。

割り算と剰余演算子作るのめんどくさくて作ってないけど、
たいてい必要になるのってその辺なんだよなー。もじゅろ10億7とかさー。
というわけで、longのもじゅろだけはとれるよーにしといた。

実戦で使える速度が出るかどうかは未検証。
まぁでもそういう問題は、たぶん、計算量的に無理なようにできてるでしょうね。

続きを読む

2012/04/01(Sun)C# で 素数表を得る。エラトステネスのふるい

はてブ数 2012/04/01 3:57 プログラミング::C# つーさ

素数表を得る

class PrimeTable {
    public List<int> Primes = new List<int>();
    public bool[] IsPrime;
    public PrimeTable(int max) {
        IsPrime = new bool[max + 1];
        for (int i = 2; i <= max; i++) IsPrime[i] = true;
        for (int i = 2; i <= max; i++)
            if (IsPrime[i]) {
                Primes.Add(i);
                for (int j = i * 2; j <= max; j += i)
                    IsPrime[j] = false;
            }
    }
}

public class Program {
    static void Main() {
        foreach (var p in new PrimeTable(100).Primes)
            Console.WriteLine(p);
    }
}