关于最近做短信工具的心得

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013919153/article/details/84989888

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进制的互逆转换(对于大数处理的一种方法)

扫描二维码关注公众号,回复: 4502715 查看本文章
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。

猜你喜欢

转载自blog.csdn.net/u013919153/article/details/84989888