re: 反外掛的一點(diǎn)牢騷 螞蟻終結(jié)者 2007-12-23 13:17
中國的外掛真是NB的不行了!
re: strlen源碼剖析 螞蟻終結(jié)者 2007-12-05 19:39
@福福
中文字符應(yīng)該用wcslen才對(duì),strlen是用來處理單字節(jié)字符串的。
詳細(xì)描述請(qǐng)看MSDN:
However, strlen interprets the string as a single-byte character string, so its return value is always equal to the number of bytes, even if the string contains multibyte characters. wcslen is a wide-character version of strlen; the argument of wcslen is a wide-character string and the count of characters is in wide (two-byte) characters.
re: MD5算法的C++實(shí)現(xiàn) 螞蟻終結(jié)者 2007-11-10 10:49
@MonkeyLin
thanks!
ICU記得以前編譯Boost庫時(shí)下載過。
在64位機(jī)器上確實(shí)會(huì)有問題,不過為了簡(jiǎn)單,也為了減少對(duì)庫的依賴性,把
typedef unsigned long ulong;
改成
typedef unsigned int uint32;
基本就夠用了。
已經(jīng)更新了源代碼^_^
re: strlen源碼剖析 螞蟻終結(jié)者 2007-11-04 09:35
you gotta it!
re: 自己動(dòng)手編寫的QQ客戶端 螞蟻終結(jié)者 2007-10-22 23:11
呵呵,前不久也打算寫個(gè)玩玩,一直沒時(shí)間
re: MD5算法的C++實(shí)現(xiàn) 螞蟻終結(jié)者 2007-10-22 13:24
@MonkeyLin
都是學(xué)習(xí)嘛,互相討論會(huì)更有收獲呵呵。
re: 做筆試題增長(zhǎng)功力(3)--華為 螞蟻終結(jié)者 2007-10-18 19:22
華為的筆試題貌似不難么,呵呵
re: 無符號(hào)變量居然也能輸出-1 螞蟻終結(jié)者 2007-10-18 12:44
呵呵,過來改正個(gè)筆誤,11111111居然寫成了1111了...
re: 你也許不知道的#define用法 螞蟻終結(jié)者 2007-10-18 11:21
#@x
倒沒怎么見過
re: 漢語編程++ 螞蟻終結(jié)者 2007-10-18 11:17
非把人累死不可,確實(shí)是無聊的東西
re: 無符號(hào)變量居然也能輸出-1 螞蟻終結(jié)者 2007-10-18 11:08
實(shí)際上就是有符號(hào)數(shù)轉(zhuǎn)換中"符號(hào)位擴(kuò)展"的問題。
short temp2 = temp1;
...
unsigned int temp6 = temp2;
先不管temp2的值是多少,上面就是short符號(hào)位擴(kuò)展到int,然后再從int轉(zhuǎn)unsigned int的問題。short是有符號(hào)類型,先進(jìn)行符號(hào)位擴(kuò)展(假設(shè)short為16位,int/unsigned int為32位)
1. short為正數(shù),則最高位為0,當(dāng)從16位擴(kuò)展到32位int時(shí),擴(kuò)展的高16位用0填充,即將符號(hào)位0進(jìn)行擴(kuò)展,這樣擴(kuò)展后的32位整數(shù)和原來的整數(shù)值是一樣的。
2. short為負(fù)數(shù),則最高位為1,當(dāng)從16位擴(kuò)展到32位int時(shí),擴(kuò)展的高16位用1填充,即將符號(hào)位1進(jìn)行擴(kuò)展,這樣擴(kuò)展后的32位整數(shù)和原來的整數(shù)值是也是一樣的。
即上面的代碼等效于:
short temp2 = temp1;//temp2為-1(11111111 11111111)
...
int tempInt = temp2; //符號(hào)位擴(kuò)展,tempInt也為-1(11111111 11111111 11111111 11111111)
unsigned int temp6 = tempInt;//將(11111111 11111111 11111111 11111111)解釋為無符號(hào)
re: MD5算法的C++實(shí)現(xiàn) 螞蟻終結(jié)者 2007-10-18 10:27
@MonkeyLin
thanks!不過我想你沒有仔細(xì)看代碼,string是按值返回的,不存在任何問題。
如果返回值類型是string&或string*,才會(huì)出現(xiàn)你說的返回局部變量的問題。
另外,return str;與return string(str);并無本質(zhì)區(qū)別。
re: 如何寫出專業(yè)的C頭文件 螞蟻終結(jié)者 2007-10-17 10:04
都是相當(dāng)實(shí)用的,不錯(cuò)。
入門的書籍有一本叫C++ how to program什么的好像很不錯(cuò),就是有點(diǎn)厚,大概1000多頁吧。中等書籍C++ Primer不錯(cuò),再就是Effective C++,More Effective C++, Exception C++, More Exception C++之類的。
C++標(biāo)準(zhǔn)庫的當(dāng)然少不了,講STL入門的有The C++ Standard Library,還可以當(dāng)參考書用。還有STL源碼剖析等。。。不一一列舉了,總之好書太多了呵呵
re: strlen源碼剖析 螞蟻終結(jié)者 2007-10-12 16:43
我也奇怪,就改了一下,再發(fā)布就變了。連日期都變了,郁悶。。。
@fr3@K
謝謝你的建議。
不能從static code中調(diào)用Instance()確實(shí)是一種限制。我想應(yīng)該可以通過某種類似Boost::singleton中的技巧來確保static object(mutex)在Instance()之前初始化。有時(shí)間了再把這段內(nèi)容補(bǔ)上。
其實(shí)后來覺得多數(shù)情況下eager initialization要優(yōu)于lazy initialization。
如經(jīng)典的Meyer's Singleton以及Boost::singleton
@fr3@K
實(shí)際上multithreading的問題不在于mutex這里,一個(gè)好的設(shè)計(jì)會(huì)在main函數(shù)真正啟動(dòng)后再調(diào)用Instance(),而這時(shí)候global object可以確保已經(jīng)初始化,即在調(diào)用Instance()時(shí)可以保證mutex已經(jīng)初始化。因此只要程序在真正進(jìn)入main函數(shù)以前不調(diào)用Instance(),就不會(huì)有g(shù)lobal instance的初始化問題。
不錯(cuò),比較詳細(xì),有時(shí)間再看。
re: 開源QQ協(xié)議庫QQProtocol 螞蟻終結(jié)者 2007-10-06 09:38
不錯(cuò)的東西,先收下了哈哈。。。
re: strlen源碼剖析 螞蟻終結(jié)者 2007-09-27 11:16
c語言的版本不會(huì)有endian的問題,如果用匯編就需要注意了。
假設(shè)有4個(gè)連續(xù)的字節(jié)abcd,現(xiàn)在要找出其中的第一個(gè)0字節(jié):
1. 在PowerPC這種big-endian的計(jì)算機(jī)上,將這4個(gè)字節(jié)讀到寄存器中依然是
abcd,從左到右找到最左邊的0字節(jié)就OK了。
2. 在X86這種little-endian的計(jì)算機(jī)上,將這4個(gè)字節(jié)讀到寄存器中就會(huì)變成
dcba,這就需要從右到左找到最右邊的0字節(jié)。
可以看出,上面VC的匯編實(shí)現(xiàn)是針對(duì)X86計(jì)算機(jī)的。
re: 處女座:避免陷入細(xì)節(jié) 螞蟻終結(jié)者 2007-09-27 10:06
剛好我是處女座的,難道是在說我呵呵!
re: strlen源碼剖析 螞蟻終結(jié)者 2007-09-27 09:35
Sorry,我不該用WORD這個(gè)單詞。我說的WORD在這里表示計(jì)算機(jī)中的一個(gè)字長(zhǎng),不是一般為2個(gè)字節(jié)的WORD類型。
re: C++&Win32寫的空當(dāng)接龍 螞蟻終結(jié)者 2007-09-27 09:13
AI算法不是我自己寫的,用的是Freecell Solver的C代碼。那個(gè)比較復(fù)雜,差不多有1W多行,為了方便我就封裝成了AI.dll
re: strlen源碼剖析 螞蟻終結(jié)者 2007-09-27 09:06
實(shí)際上0~255都能檢測(cè)出來的:
if (cp[0] == 0)
return cp - str;
if (cp[1] == 0)
return cp - str + 1;
if (cp[2] == 0)
return cp - str + 2;
if (cp[3] == 0)
return cp - str + 3;
如果上面的語句執(zhí)行完還沒有return,則會(huì)繼續(xù)下一次循環(huán),這樣還是能檢測(cè)到在if語句中漏掉的128~255,只不過效率上會(huì)有所損失。如果要檢測(cè)0~255之間的字符,strlen_c比strlen_d要好。因?yàn)閟trlen_c只會(huì)漏掉這樣的WORD:
10000000 XXXXXXXX XXXXXXXX XXXXXXXX
re: 從for到foreach 螞蟻終結(jié)者 2007-09-27 08:33
用for來處理container確實(shí)比較麻煩,有時(shí)候for語句還得折行。
估計(jì)新的特性可能還要等不少時(shí)間...
re: strlen源碼剖析 螞蟻終結(jié)者 2007-09-27 08:19
可能我說的不夠清楚,看下面的例子:
b3 b2 b1 b0
31------------------------------->0
longword: 00001001 00011000 00000000 00001100
+ magic_bits: 01111110 11111110 11111110 11111111
sum: 10001000 00010110 11111111 00001011
^ ~longword: 11110110 11100111 11111111 11110011
a:
01111110 11110001 00000000 11111000
& ~magic_bits: 10000001 00000001 00000001 00000000
result: 00000000 00000001 00000000 00000000
sum = longword + magic_bits;
a = sum ^ ~longword;
即用sum與longword逐位比較,如果有某個(gè)位相同,就說這個(gè)位在加法后未改變,這樣在a中為1的位就是未改變的。
result = a & ~magic_bits;
得到未改變的hole位,從上例可以看出第16 bit這個(gè)hole加法后未改變,這樣就檢測(cè)出了0字節(jié)。
re: C++ 類成員的CALLBACK 螞蟻終結(jié)者 2007-09-23 09:32
不錯(cuò)的例子
re: 動(dòng)態(tài)鏈接dll 螞蟻終結(jié)者 2007-09-17 08:01
也有叫l(wèi)oad-time dynamic linking和run-time dynamic linking,上面的是run-time dynamic linking
re: 又是未完成的東西 螞蟻終結(jié)者 2007-09-15 22:49
看了一下ppt的代碼,如skipper所說,效率并不高,先不說lazy evaluation。看看Metrix本身的設(shè)計(jì):
copy construct 其實(shí)沒必要2層循環(huán),也沒必要用operator()來存取元素:
這樣寫效率肯定不一樣
Metrix::Metrix(const Metrix& a) {
M = a.M;
N = a.N;
int size = M * N;
element = new double[size];
for (int i = 0; i < size ; ++i)
element[i] = a.element[i];
}
當(dāng)然了,上面的還可以再優(yōu)化,用memcpy會(huì)更快:
Metrix::Metrix(const Metrix& a) {
//...
memcpy(element, a.element, size * sizeof(double));
}
copy assignment operator以及operator+也一樣可以優(yōu)化...
不多說了呵呵
re: MD5算法的C++實(shí)現(xiàn) 螞蟻終結(jié)者 2007-09-15 18:41
@abc
沒問題就好。“您”字看得我好怪...
re: 今天碰到了一個(gè)奇怪的問題 螞蟻終結(jié)者 2007-09-15 10:42
new (trieNode);//還真是奇怪的寫法
如果trieNode是個(gè)class,
new (trieNode);
去掉括號(hào)等同于new trieNode;
也應(yīng)該等同于new trieNode();
re: MD5算法的C++實(shí)現(xiàn) 螞蟻終結(jié)者 2007-09-15 09:52
@abc
我最早就是在VC++ 2005上寫的代碼,在GCC上也測(cè)試過。
有可能你沒有把md5.cpp加入工程,如果只用md5.h和test.cpp進(jìn)行編譯就會(huì)出現(xiàn)上面的8個(gè)error。
re: 熊貓燒香 源碼 有興趣的來看看 螞蟻終結(jié)者 2007-09-14 08:20
對(duì)Delphi不熟悉,飄過。。。
不錯(cuò),以前只知道bit field不好移植,今天算是見到實(shí)際例子了
re: STL問題系列一 螞蟻終結(jié)者 2007-09-13 20:21
這本書我沒看過,不過The C++ Standard Library很不錯(cuò)
re: msdn也有錯(cuò)? 螞蟻終結(jié)者 2007-09-13 10:11
應(yīng)該是MSDN的問題,STL的參考書還是The C++ Standard Library比較棒.
re: MD5算法的C++實(shí)現(xiàn) 螞蟻終結(jié)者 2007-09-13 08:27
@ornaking
呵呵,共同學(xué)習(xí)
re: 寫了一個(gè)用來寫log信息的小程序 螞蟻終結(jié)者 2007-09-11 15:51
cppblog最近人氣不高啊,幫你頂頂...
re: MD5算法的C++實(shí)現(xiàn) 螞蟻終結(jié)者 2007-09-11 15:32
@VrcatS
有意思,thanks!
re: MD5算法的C++實(shí)現(xiàn) 螞蟻終結(jié)者 2007-09-11 12:25
總算抽出時(shí)間修改了一下接口,只敢說比以前的好。實(shí)在想不出比較完美的,要是哪位有好的想法還望告知...
re: MD5算法的C++實(shí)現(xiàn) 螞蟻終結(jié)者 2007-09-10 11:45
@SmartPtr
Sorry!我對(duì).Net不太熟悉呵呵
re: MD5算法的C++實(shí)現(xiàn) 螞蟻終結(jié)者 2007-09-10 11:25
@Ray
Thanks!
頭文件的define確實(shí)該放在cpp里,是我疏忽了。
類的接口也正在優(yōu)化...