用c语言怎样得到一个汉字的GB2312编码

Python012

用c语言怎样得到一个汉字的GB2312编码,第1张

源代码是GB2312编码方式写的就比较简单

void printgb(unsigned char* s) {

while (*s) {

if (*s >= 0x7f) {

printf("%02x%02x ", *s, *(s+1))

s += 2

}

else {

printf("%04x ", *(s++))

}

}

}

int main() {

printgb("2017你好中国great china")

return 0

}

一、这个转换关键要有码表,而不是什么语言。UTF-8不一定总能转换成GB2312、GBK、GB-18030等。GB2312实际上是UTF-8(Unicode的一种形式)的一个子集。

常用的基本方式有两个类别:

1、iconv,这个是通用的,具体的看手册

2、Windows的WideCharToMultiByte、MultiByteToWideChar。WideChar就是Unicode(UTF-16),UTF-8、GB2312等同属于MultiByte,先要将UTF-8变成WideChar,然后将WideChar再变成GB2312。

二、如果只有一两个文件,用记事本打开UTF8文件,然后保存,保存时点击“保存选项”按钮,选择文件格式为ANSI,在中文Windows环境下,这个新文件就是GB2312格式的了。

其实 linux 和 windows 的系统函数都是C函数,并且提供了GB2312toUTF-8的函数,所以C语言是可以实现转码的。以下是windows的例子:int num = ::MultiByteToWideChar(CP_ACP, 0, "你好", -1, NULL, 0)wchar_t* m_arrayShort = new wchar_t[num]::MultiByteToWideChar(CP_ACP, 0, "你好", -1, m_arrayShort, num)int len = ::WideCharToMultiByte (CP_UTF8, 0, (LPCWSTR)m_arrayShort, num, 0, 0, NULL, NULL)char *tmpPT = new char[len+1]::WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)m_arrayShort, num, tmpPT, len, NULL, NULL)tmpPT[len] = 0