2012年5月28日 星期一

BigInteger 超大整數 class for C++

無限長度的超大整數 class,提供 加、減、乘、除、餘數、負數、大小比較等基本功能,由於是為了個人使用上的須要而開發,原則上是不會再增加其他運算功能,因提供的是原始檔,若有其他須求請自行擴增吧。

下載 BigInteger_1.13(C++ 版).rar
https://www.dropbox.com/s/hvag2ppa1h1fyrl/BigInteger_1.13%28C%2B%2B%20%E7%89%88%29.rar
http://pan.baidu.com/s/1jGsoUuq

2012年5月16日 星期三

GDI 映射模式

GDI 映射公式

以 X 方向的視窗口邏輯單位(xWindow)轉換為視埠設備單位(xViewport)為例:
 
xViewport = (xWindow - xWimOrg) * (xViewExt / xWinExt) + xViewOrg

(xViewExt / xWinExt) 是用來做轉換的比值,兩數是可任意值,但依平台不同有其實際的數值來源,兩者可由設備物件的 CDC::GetViewportExt() 和 CDC::GetWindowExt() 取得。

多國語言插件

這是採用 CxxlMan 程式庫的機動化元件所做的插件,可以幫你寫的程式或其他插件可以有提供多國語言文字的處理功能,文字來源由語言轉換檔提供,依多國語言的需求編製相應的語言轉換檔,語言轉換檔只是一般的文字檔(但須是 Unicode 編碼)。

下載點:多國語言插件(7-01-2012 更新).7z

2012年4月23日 星期一

可讀取 Unicode 檔案的 wifstreambuf

因發現 wifstream 不能用 Unicode 檔名,覺得太不方便了,所以寫了以下這個 class,但後來發現 gcc 的 wifstream/wistream 也沒辦法處理 Unicode 文字為內容的檔案,wifstream/wistream 只是虛有其名,所以計畫放棄了。

改用 vs2008 來做,vs2008 的 wifstream 可以使用 Unicode 的檔名,但 wifstream 仍不能讀取 Unicode 的文字內容,不過用 wistream 配合以下的 class 卻成功了。

經網友 ice_emissary(燃燒的大地) 提醒是 Unicode BOM 檔頭的問題,修改後果然成功。

另外 wifstream 應該只是用來讀取 ansi 的檔案,只不過會自動轉型成 wchar_t 來使用


以下參考資料的連結
http://www.cplusplus.com/reference/iostream/streambuf/
http://oopweb.com/CPP/Documents/CPPAnnotations/Volume/cplusplus20.html
http://www.diybl.com/course/3_program/c++/cppjs/200822/98427.html
http://www.dreamincode.net/code/snippet2499.htm

以下是 wifstreambuf.h 的內容,只是一個 .h 檔

2012年4月20日 星期五

google+ 要砍我了

google+ 說我名字違反他們的命名政策,要停用我的 google+,但我的名字早在 google+ 出現之前就已經在使用了,命名政策不是有為此提供例外處理嗎?在 google 搜尋找 cxxlman 就找得到證據了,我找不到申訴連結,曾用過一次但忘了,麻煩 google+ 的管理大大看到請高抬貴手

2012年4月15日 星期日

WinXP+gcc 編譯 wxWidgets

網路上一堆秘笈,搞得我快吐血,結果正確的解答是要選對 gcc 的版本,太新的編譯不出來,不過舊版的也不易找到,我是用 Code::Blocks 8.02 內附的 gcc 3.4.5。

我採用的 wxWidgets 為 2.8.11 版,到 http://www.wxwidgets.org/downloads/ 抓 all wxWidgets ports 中的 zip 檔,將它解壓到 C:\,資料夾名稱為 wxWidgets-2.8.11


2012年4月14日 星期六

C++ 程式編譯之字串

當使用 C 的 printf() 或 C++ 的 cout 秀出文字運作原來相當簡單,就是直接把執行程式內存放的字串字碼丟給系統處理就是了,只要字碼正確就會看到正確的字形在 Console 視窗秀出來。

但這個正確的字碼是怎麼產生的?看看以下這個測試程式,請用記事本編寫比較方便,隨後會做不同的編碼存檔。

#include <iostream>
using namespace std;

int main()
{
  const char *ansi_str1 = "中文";

  cout << "ansi_str1 = " << ansi_str1 << endl;
  return 0;
}

將之存成 ANSI 編碼格式,檔名為 test.cpp,我用 gcc 4.6.2 進行