配置3600+、2G,光是打开解决方案,VS 2008就要花差不多半个小时来生成ncb文件和更新IntelliSense,然后断断续续编译了近4个小时,还没编译完,占了差不多10G的硬盘——满了,不玩了,留一份纯代码用来膜拜算了,编不起我还看不起么。
不过相对于编译FireFox来说,编译Chromium算是简单多了,编译要用到的都是很常见的软件,比如svn、python等,而且可以用depot_tools工具自动获取exe,不需要安装,注意要手动checkout third_party\xulrunner-sdk库,官方打包的gz里没有这个库。
在Chromium(Google Chrome浏览器的开源项目)源代码里看到一个字符串转换函数WideToASCII:
#include <iostream> #include <string> std::string WideToASCII(const std::wstring& wide) { return std::string(wide.begin(), wide.end()); } int main() { std::wstring ws(L"Test String"); std::string s(WideToASCII(ws)); std::wcout < < L"Wide: " << ws << std::endl; std::cout << "ASCII: " << s << std::endl; return 0; }
CSDN上求助无果,只好用自创的非主流方法了。
asio自带的例子里是用deadline_timer的async_wait方法来实现超时的,这种方法需要单独写一个回调函数,不利于把连接和超时封装到单个函数里。传统的Winsock编程可以先把socket设为非阻塞,然后connect,再用select来判断超时,asio也可以这样做,唯一“非主流”的是asio里没有一个类似select的函数,所以得调用原始的Winsock API,也就牺牲了跨平台:
boost里有个crc库,可以方便的计算crc值,使用也很简单,下面是个计算crc32的例子:
#include <iostream> #include <boost/crc.hpp> int main() { char data[] = "StarsunYzL"; boost::crc_32_type crc32; crc32.process_bytes(data, sizeof(data) - 1); std::cout << std::hex << std::uppercase << crc32.checksum() << std::endl; // 输出D5FABFDB return 0; }
还可以计算crc16等,具体参考crc库文档。
(怎么自己实现crc32计算,请看《计算CRC32源码》)

