1、实现中文转Unicode
并将转换的16进制存进数组中
#include
#include
#include
#include
#include
constexpr auto LEN = 2048; //vs中编译,更换编译环境需要修改 #define LEN 2048 int main() {
char sendbuf[LEN]; wchar_t str[] = L"中国汉字"; int i,k = 0; int move_bit = 0; setlocale(LC_ALL, "zh_CN.utf8"); char* buf = (char*)malloc(MB_CUR_MAX); for (i = 0; i < wcslen(str); i++) wprintf(L"%lx", str[i]); printf("\n"); short * p =(short*) str; for (i = 0; i < wcslen(str); i++) {
printf("%x ", p[i]); int four_bit = p[i] >> 12; int three_bit = (p[i] & 0x0fff) >> 8; int two_bit = (p[i] & 0x00ff) >> 4; int one_bit = p[i] & 0xf; if (four_bit > 9) sendbuf[k++] = four_bit + 55; else sendbuf[k++] = four_bit + 48; if (three_bit > 9) sendbuf[k++] = three_bit + 55; else sendbuf[k++] = three_bit + 48; if (two_bit > 9) sendbuf[k++] = two_bit + 55; else sendbuf[k++] = two_bit + 48; if (one_bit > 9) sendbuf[k++] = one_bit + 55; else sendbuf[k++] = one_bit + 48; } printf("\n"); printf("%s \n", sendbuf); }
2、setlocale函数
运行环境的 locale 设置要和程序中 setlocale() 设定的 locale 一致,比如:终端的活动字符集、环境变量(一般用 LANG),要设置为 *.UTF-8,才能显示 setlocale(LC_ALL, “zh_CN.UTF-8”) 设定的 wchar_t 的中文字符。
用 wprintf() 时,要用 %ls 表示 wchar_t 的字符串,用 %s 表示 char 的字符串,具体参考:man 3 wprintf,而 Windows 的实现用 %ls、%s 都可以正确输出 wchar_t 字符串。
比如对于汉字,韩文以及日文这样的字符,它们的每一个文字都占据两个字节,所以C++提出了wchar_t类型,也称为双字节类型,或宽字符类型。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201848.html原文链接:https://javaforall.net
