转换字符串为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,阿拉伯,泰文之类的…