C#
System.Runtime.InteropServices名前空間はほかのプロセスにもハンドルにもスーッと効いてくれる……これは、ありがたい。 型名の置換を意識する必要があるのと、フラグ用定数とか調べるのが面倒くさすぎるけれども。
bsをbyte型の配列としたときに uint x = bs[3] << 24 | bs[2] << 16 | bs[1] << 8 | bs[0]; がエラーになるのはどうしてだろう。 単にビット演算の結果として符号付きの型が優先されているだけか。
デザインとコードを分離できるのはすばらしいが……。 WPFでメモ帳を再現しようと思ったがステータスバーの表示/非表示の切り替えで詰まった。Margin.Bottomをいじると高さが調節されるのではなく上方向に移動してしまうのはなぜ……。Gridとかの配置を工夫する…
byte型配列にファイルを読み込んでGetHashCodeメソッドでハッシュコードを取れば、CRC32を自前で実装したりSHA1とかの結果を圧縮したりしなくても32bitのハッシュ値を返すハッシュ関数として使えるのではないか? と思ったので配列のハッシュコードについて…
C#の仕様書(ECMA-334)によると、配列宣言時に指定する要素数にはulong型を指定できる。 よって、次のコードは有効なはず。 byte[] bs = new byte[ulong.MaxValue]; 実際、この段階ではエラーは起きない。 しかし、このバイト列を操作しようとすると算術結果…
整数論をやるのに必要そうな関数を静的クラスにまとめてみた。 今のところ、 Mod(x, m) 符号が除数mと同じになるような剰余を返す GCD(x, y) 最大公約数を返す GCDEx(x, y) ax+by=GCD(x, y)となるような整数a, bを返す Inverse(x, m) mを法とする、正の整数x…
System.Collections.Hashtableは、キーとするオブジェクトのGetHashCode()の戻り値で一意性を保証しているとする。 GetHashCode()は32bit整数型を返すので、個以上のオブジェクトをHashtableに格納しようとすると必ず衝突が起きる? ということは、64bit整数…
何でSHA1ハッシュを計算する方法が System.Security.Cryptography.SHA1Managed System.Security.Cryptography.SHA1CryptoServiceProvider System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "sha1") の3つもあるんだ。 1番…
サンプルコードの通りにやってもエラーになるので半日くらい困っていたが、試しに開いていたいくつかの画像のフォーマットがたまたまFormat24bppRgbではなかっただけだった。 LockBitsメソッド使ってバイト列操作してもBitmap.GetPixel/SetPixelメソッドと3…
やはりブロック単位で処理するとマルチバイト文字の扱いで問題が生じる。こういうのはどうやって判定すればいいんだろう? オーバーヘッドがかなり大きいが、最初から読み直すのが確実かな……。ディスクから読み出すよりも配列をコピーしていく方が速いか。
文字エンコーディングと改行コードを適切に変換するようにし、さらになるべく省メモリか高速になる書き方をしたらかなり可読性の低いコードになった……。 具体的には下記のような処理をするようにした。 テキストファイルをバイナリとして開き、先頭1KBくらい…
System.IO.StreamReaderで文字エンコーディングを指定しなかった場合、C#既定のUTF-16LEだけではなくUTF-16BEやUTF-8もちゃんどデコードされているのはなぜ? 文字エンコーディングを判別するメソッドが公開されていないのはなぜ?
テキストファイルをバイナリとして開いてbyte配列に格納して操作したのち、stringで返すようなプログラムを組んでビルドした。 ところが40MBくらいのテキストファイルを2つ3つくらい開くと物理/仮想メモリの使用量が800MB/1300MBくらいになる。 あまり効果が…
SetValueでbool値を保存するとレジストリには自動的に型変換されて文字列型で保存されるが、GetValueではbool値としては読み出せないのか……。
エラー発生時に強制終了させたいときはApplication.Exit()じゃなくてEnvironment.Exit(int errCode)を使うのか……。
IComparerインターフェイスを実装したクラスを用いるということは分かっていたので、「ListViewの項目を並び替える: .NET Tips: C#, VB.NET, Visual Studio」を参考にさせていただいた。 ついでに通常のWindowsフォームのリストビューのようにソート方向を示…
アプリケーションで使用する変数などを初期化するときはコンストラクタ内にコードを書くのが適切なのだろうけど、Windowsアプリケーションの場合はフォームが読み込まれるときのイベントから呼び出されるメソッドに初期化用のコードが書かれているソースコー…
System.Data.DataColumnクラスではスキーマを定義し、DataRowで実データを扱う。よって、 string str; DataRowCollection drc = dataSet1.Tables["ExampleDataTable"].Rows; foreach(DataRow dr in drc) { // 0列目から取り出す str = dr[0].ToString(); } …
ちゃんとxml宣言のencoding属性を見てキャラクターセットを判別してるんだな……。
XMLファイルからDataSetにXMLを読み書きするにはReadXml/WriteXmlメソッドを使えばいいようだが、これらでファイルを参照するときはStream型のほかにString型でオーバーロードされたメソッドを使うことができる。 しかし、インターネットで検索して上位にく…
些細なことにかなり時間をかけてしまった……。 public class Form2 : Form { string str; 《省略》 public string Str { get { return str; } } } public class Form1 : Form { 《省略》 [STAThread] static void Main() { Application.Run(new Form1()); } …
コンストラクタの中では通常の終了手順であるApplication.Exit()メソッドを呼び出してもプログラムを終了させられないので工夫が必要なようだ。 調べてみると例外を用いるのが普通……なのかな? メインエントリポイント /// <summary> /// アプリケーションのメイン エ</summary>…
コンソール出力を読み取ってダイアログで表示させることに成功。 System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.FileName = "command"; p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; p.Start…