スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

ファルダ選択ダイアログ C/WinAPI

メモついでに、C/WinAPIでフォルダ(ディレクトリ)選択ダイアログの呼び出し方を記事にします。

そんで、フォルダ選択ダイアログってのはコレ
フォルダ選択ダイアログサムネ

長くなるので、続きへどうぞ。

Read more
スポンサーサイト
  1. 2011/02/20(日) 01:59:23|
  2. プログラミング
  3. | Track back:0
  4. | Comment:1

直線で曲線を描く方法2


前回の直線で曲線を描く方法のプログラムを改良し

もう少しだけ綺麗で、見栄えの良いものを作りました。

実行ファイルとソースコードをzipにしたのでアップしときます。
http://u9.getuploader.com/SkyBlue/download/22/LinearCurve.zip

肝心のサムネイルは続きに張ります。

Read more
  1. 2011/02/18(金) 02:36:09|
  2. プログラミング
  3. | Track back:1
  4. | Comment:2

直線で曲線を描く方法


昨日の夜に友人から直線で曲線を描く方法を教えてもらい。

面白かったのでプログラムにして紹介。

サムネ
LinearCurve

詳しくは続きから。

Read more
  1. 2011/02/17(木) 15:45:25|
  2. プログラミング
  3. | Track back:0
  4. | Comment:1

バイトオーダーって何?

バイトオーダーまたはエンディアンとは

簡単に言うとバイトの順序のことです。

メモリ上に2バイト以上のデータを置く際にどの順序でデータを並べるかを定めるもの。
これはCPUに依存します。
インテルのCPUがリトルエンディアンを採用。
モトローラのCPUがビックエンディアンを採用。
この他のマイコンなどはメーカによりけりですね。
それと、最近ではエンディアンを切り替えれるCPUが有ります。
組み込み系をやる人はこれらに注意しなければなりません。

エンディアンの具体例を説明します。

例えば「0x12345678」(1,2,3,4)(00000001|00000010|00000011|00000100)
※左から16進数、バイト順序、2進数を表してます。

これは4バイトのデータです。(「0xFF」で1バイトです。1バイト=8ビット)
メモリに置くとき

0x12345678(1,2,3,4)(00000001|00000010|00000011|00000100)

という順序の場合をビックエンディアンと言います。特徴はバイトがそのまま並ぶ

0x78563412(4,3,2,1)(00000100|00000011|00000010|00000001)

と並べばリトルエンディアンです。特徴はバイトが逆順に並ぶ

奇に、本当に奇に他の順序でデータを扱うCPUがあります。

0x56781234(3,4,1,2)
0x12563478(1,3,2,4)
0x56127834(3,1,4,2)



まあ、理論的には20通りがある訳です。(4バイトの場合ですよ)

そしてネットワークを経由してデータを送信する場合はビックエンディアンを使用します。
このことをネットワークバイトオーダーと言います。
つまり「ネットワークバイトオーダー=ビックエンディアン」ですよ、というコトです。

もう一つ注意するのはデータをファイルに書き込む場合。
特にユニコード文字列を書き込む場合です。
ユニコード文字列は一文字で"2バイト"使います。
つまりユニコード文字列もエンディアンを考慮しなくてはならないのです。

ユニコード文字列を書き込む場合。
あらかじめビッグエンディアンで書き込むのか、リトルエンディアンで書き込むのかを決めておき。
それに従いファイルに書き込みます。

これらエンディアンは同じメーカーのCPU上で使用するアプリなら無視して構わないのですが。
今の時代ファイル共有は当たり前なので、そんな都合のいい話は無いでしょう。

そしてC言語にはこれらエンディアンを変換する関数があります。

htons(),ntohs(),htonl(),ntohl()です。
主にネットワーク関連のプログラムを作るときに重用します。
詳しくは検索して下さい。

最後が's'になる関数が2バイト(16ビット)の変数のエンディアンを変換してくれます。
short型の頭文字ですね。

なら最後が'l'になるのはlong型です。
つまり4バイト(32ビット)の変数のエンディアンを変換します。

htonx()はホストのエンディアンからネットワークバイトオーダーに変換する関数です。
(htonxの'x'は's'か'l'ってことですよ。)

ntohx()はその逆、ネットワークバイトオーダーからホストのエンディアンに変換します。
※ホストってのはアプリを走らせてるPCのコト。この場合はPCのCPUって意味。

残念でならいのが64ビットを変換するのが今現在ないコトです。
……まぁ、自分でつくりゃいいんだが。

自分の使用しているPCのエンディアンのことを特にホストバイトオーダーといいます。
私の場合は、CPUがインテルなので、ホストバイトオーダーはリトルエンディアンです。
モトローラのCPUを使ってる人はホストバイトオーダー=ビックエンディアンってコトですね。

tema:プログラミング - Genre:コンピュータ

  1. 2010/10/04(月) 01:29:54|
  2. プログラミング
  3. | Track back:0
  4. | Comment:1

使い勝手向上版MessageBox関数

WinAPIを使用したプログラミングをする方なら
バグ探しに重宝しているであろう。

MessageBox関数

今回はこのMessageBox関数を改修して、利便性向上を図ったものを紹介。

注)私が気付いてないバグが有るかもしれません。
 使用する場合は自己責任でお願いします。

例の如く続きから。

Read more

tema:プログラミング - Genre:コンピュータ

  1. 2010/09/22(水) 00:01:30|
  2. プログラミング
  3. | Track back:0
  4. | Comment:0