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



浙公网安备 33010602011771号