1. 程式人生 > >關於最近做簡訊工具的心得

關於最近做簡訊工具的心得

1.jsoncpp庫:

判斷鍵是否存在json陣列

使用json["key"].asType()獲取到值說明key存在

舉例:

if(json["key"].asInt())
{
    cout<<"key is exist, value is "<<json["key"].asInt()<<endl;
}

獲得空陣列

Json::Value root;
root["param"].resize(0);

結果:
{
    "param":[]
}

2.MFC

訊息傳遞

sendmessage 和postmessage,一個是在訊息佇列插入訊息等待執行完畢之後返回和插入訊息就返回。但是,對於postmessage的引數,最好傳遞的引數使用new或者全域性變數,不要使用棧上的區域性變數

,容易出現各種問題。

對話方塊不響應右鍵訊息

過載虛擬函式PreTranslateMessage,處理如下:

	if (pMsg->message == WM_NCRBUTTONDOWN)
	{
		return TRUE;
	}

3.36進位制的互逆轉換(對於大數處理的一種方法)

const char HZXMAP[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E','F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };

BYTE* longToHzx(__int64 data)
{
	__int64 data_tmp = data;
	int size = 0;
	int char_length = sizeof(HZXMAP);	//36
	for (data_tmp = data; data_tmp > 0; size++) {
		data_tmp /= char_length;
	}

	BYTE *buff = new BYTE[size+1];
	memset(buff,0,size+1);
	data_tmp = data;
	for (int i = 0; i < size; i++) {
		buff[size - i - 1] = HZXMAP[(BYTE) ((data_tmp % char_length) & 0x00000000000000FF)];
		data_tmp /= char_length;
	}

	return buff;
}

//查詢對應字元所對應index
bool find_array_index(int arr[],int len,BYTE* data)
{
	for (int i = 0; i< len;i++)
	{
		for (int j = 0; j<36; j++)
		{
			if (data[i] == HZXMAP[j])
			{
				arr[i] = j;
				break;
			}
		}
	}

	return true;
}

//計算base的num次方
__int64 power(int base, int num)
{
	__int64 val = 1;
	while(num--)
	{
		val *= base;
	}

	return val;
}

//逆轉換
	int index[15] = {0};
	find_array_index(index,15,data0);
	int size = sizeof(HZXMAP);
	__int64 data1 = 0;
	for (int i = 0; i< 11; i++)
	{
		__int64 tmp = power(size,10-i);
		data1 = data1 + tmp*index[i];
	}

後續我將上傳封裝好的libcurl庫,jsoncpp庫。一些好用的執行緒庫、sha256、log、配置檔案操作等原始碼,當然這些僅限於windows。