2011年10月

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

ckeditor for wordpress 3.6.2.1 HTML转义bug

blogging的时候添加代码喜欢用

标签,然后c代码里面有很多的#include <stdio.h>之类的头文件引用。

在wysiwyg模式下输入<>后html模式下应该转义成<和>,但是这个bug直接转成了<>,当再切换到wysiwyg的时候,#include <stdio.h>已经变成了#include <stdio.h></stdio.h>。因为把<stdio.h>当成了一个html tag。

This bug has been reported a week ago in this post. michal_cksource (the author of ckeditor) said bug has been fixed, but it will be available in next release.:(

只能忍忍了,现在暂时用KindEditor.Everything is just fine.

Visual Studio 2005及其sp1下载

vs2005:

ftp://Share:1118@www.sooweb.net/Share/Design/Visual%20Studio.NET%202005/ms_vs_2005_pro_chs.iso

vs2005 sp1:

http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=BB4A75AB-E2D4-4C96-B39D-37BAF6B5B1DC

warning C4172: 返回局部变量或临时变量的地址

msdn的解释

A function returns the address of a local variable or temporary object. Local variables and temporary objects are destroyed when a function returns, so the address returned is not valid. Redesign the function so that it does not return the address of a local object.

一个函数返回本地变量或临时变量,返回指是不确定的,当函数返回的时候本地变量或临时变量已经销毁,所以返回的肯定是无效值。

因为习惯了php的函数编程习惯,所以经常碰到C4172警告(见:http://tunps.com/1309314816),而且那个时候还没搞定是怎么回事。只是网上说本地变量加上static就ok,因为static会让变量又本地变为全局。

以下代码会产生此错误:

#include <stdio.h>
int* sum(int a ,int b)
{
    int c[10]={0};
    c[6] = a + b;
    return c;
}
void main()
{
    int *p = sum(1,2);
    printf("%d\n",*(p+6));
    getchar();
}

其实经过很长一段时间win32编程发现里面的函数返回值都保存在某些参数中。这样就可以保证不新建变量保存返回值,举个例子,比如:

WINUSERAPI
int
WINAPI
GetWindowTextW(
    __in HWND hWnd,
    __out_ecount(nMaxCount) LPWSTR lpString,
    __in int nMaxCount);

就是把返回值放在lpString中。