转换字符串为16进制int /转换json \uXXXX码为可识别的中文 [C语言]

来自http://tunps.com/json-convert-cjk 图文并茂

#include <stdio.h>
int i;
char *str1 =  "cdef";
sscanf(str1,"%x",&i);
printf("%x\n",i);

str1是需要转换成16进制int型的字符串。最后将”cdef”转为0xcdef。

有些人问这个有什么鸟用呢。

其实总所周知javascript object notation表示cjk字符串的形式是:\uXXXX,XX都是0~15(0~F)的数字。

使用如下代码:

DWORD dwNum;
WCHAR str[10]={0};
char str2[10]={0};
str[0] = 0x751f;//生
str[1] = 0x65e5;//日
str[2] = 0x5feb;//快
str[3] = 0x4e50;//乐
str[4] = 0x0001;//
dwNum = WideCharToMultiByte(CP_OEMCP,0,(LPCWSTR)str,-1,NULL,0,NULL,FALSE);
WideCharToMultiByte (CP_OEMCP,0,(LPCWSTR)str,-1,str2,dwNum,NULL,FALSE);
printf("%s",str2);

如果要生成unicode表(0×0000~0xFFFF),可以使用以下代码:

#include <windows.h>
#include <stdio.h>
void main()
{	
	DWORD dwNum;
	char str2[10];
	int i;
	WCHAR str[100];
	FILE *fp;
	ZeroMemory(str,0xf);
	fp = fopen("c:\\ansi.txt","w+");
	for(i=0;i<0xffff;i++)
	{
		*str=i;
		
		dwNum = WideCharToMultiByte(CP_OEMCP,0,(LPCWSTR)str,-1,NULL,0,NULL,FALSE);
		WideCharToMultiByte (CP_OEMCP,0,(LPCWSTR)str,-1,str2,dwNum,NULL,FALSE);
		fprintf(fp,"%s",str2);
	}
}

生成的ansi.txt大概有85kB:

如果直接fprintf str的话:

int i;
WCHAR str[100];
FILE *fp;
ZeroMemory(str,0xf);
fp = fopen("c:\\unicode.txt","w+");
for(i=0;i<0xffff;i++)
{
	*str=i;
	fprintf(fp,"%s",(LPCWSTR)str);
}

输出的unicode.txt大小128kB,有各国的文字,armania,阿拉伯,泰文之类的…

posted @ 2013-03-19 11:45  stma  阅读(1922)  评论(0)    收藏  举报