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

#include <stdio.h>
int i;
char *str1 =  "cdef";
sscanf(str1,"%x",&i);
printf("%x
",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);

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

如果要生成unicode表(0x0000~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:

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

如果直接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,阿拉伯,泰文之类的…

发表评论

电子邮件地址不会被公开。 必填项已用*标注