目前共有8篇帖子。
【示例】在C語言中的char字元數組中處理雙位元組中文字元
1樓 巨大八爪鱼 2015-12-11 12:48
#include <conio.h>
#include <stdio.h>

void main()
{
    char str[9] = "簡體中文";
    char str2[8] = {'簡' >> 8, '簡' & 0xff, '體' >> 8, '體' & 0xff, 'A' , 'B', 'C', '\0'};
    puts(str);
    puts(str2);
    str[0] = '繁' >> 8;
    str[1] = '繁' & 0xff;
    puts(str);
    _getch();
}

輸出:
簡體中文
簡體ABC
繁體中文
2樓 巨大八爪鱼 2015-12-11 12:49
以上程序是在VS2012中編寫的。
如果要在VC6中運行,那麼還得加上類型強制轉換,把int轉換為char,例如:
str[0] = (char)('繁' >> 8);
str[1] = (char)('繁' & 0xff);
3樓 巨大八爪鱼 2015-12-11 12:51
還有另一種修改char字元串中單個漢字的方法:
str[2] = '體' / 0x100;
str[3] = '體' % 0x100;
結果:繁體中文
4樓 巨大八爪鱼 2015-12-11 12:53
在char字元數組中,漢字的高八位和低八位分別佔一個數組元素。
取漢字高八位的方法是將漢字常量右移8位,把低八位移出去,或者除以0x100。
取低八位的方法是將漢字常量與0xff作按位與運算去掉高八位,或者直接取0x100的餘數。
5樓 巨大八爪鱼 2015-12-11 12:54
2樓所示的方法只使用位運算,不使用除法運算,所以該方法效率要高些。
6樓 巨大八爪鱼 2015-12-11 13:00
為了方便起見,可以定義兩個宏:HIGH和LOW。例如:
#include <conio.h>
#include <stdio.h>

#define LOW(c) (char)(c & 0xff)
#define HIGH(c) (char)(c >> 8)

void main()
{
    char str1[] = {'E', 'n', 'g' ,'l', 'i', 's', 'h', '\0'}; // 這是一個普通的字元數組
    char str2[] = {HIGH('簡'), LOW('簡'), HIGH('體'), LOW('體'), HIGH('中'), LOW('中'), HIGH('文'), LOW('文'), '\0'}; // 這是一個含有漢字的字元數組
    puts(str1);
    puts(str2);
    str1[0] = 'F';
    puts(str1);
    str2[0] = HIGH('繁');
    str2[1] = LOW('繁');
    puts(str2);
    _getch();
}

輸出:
English
簡體中文
Fnglish
繁體中文
7樓 202.115.90.* 2015-12-11 15:54
VC++6下編譯1樓的程序:
#include <stdio.h>

void main()
{
char str[9] = "簡體中文";
char str2[8] = {'簡' >> 8, '簡' & 0xff, '體' >> 8, '體' & 0xff, 'A' , 'B', 'C', '\0'};
puts(str);
puts(str2);
str[0] = '繁' >> 8;
str[1] = '繁' & 0xff;
puts(str);
}
出現的警告信息:
--------------------Configuration: ccccc - Win32 Debug--------------------
Compiling...
sadsaad.c
d:\ccccc\sadsaad.c(6) : warning C4305: 'initializing' : truncation from 'const long ' to 'char '
d:\ccccc\sadsaad.c(6) : warning C4305: 'initializing' : truncation from 'const int ' to 'char '
d:\ccccc\sadsaad.c(6) : warning C4305: 'initializing' : truncation from 'const long ' to 'char '
d:\ccccc\sadsaad.c(6) : warning C4305: 'initializing' : truncation from 'const int ' to 'char '
d:\ccccc\sadsaad.c(9) : warning C4305: '=' : truncation from 'const long ' to 'char '
d:\ccccc\sadsaad.c(10) : warning C4305: '=' : truncation from 'const int ' to 'char '
Linking...

ccccc.exe - 0 error(s), 6 warning(s)


所以必須進行強制類型轉換。
8樓 202.115.90.* 2015-12-11 15:56
修改後的程序:
#include <stdio.h>

void main()
{
char str[9] = "簡體中文";
char str2[8] = {(char)('簡' >> 8), (char)('簡' & 0xff), (char)('體' >> 8), (char)('體' & 0xff), 'A' , 'B', 'C', '\0'};
puts(str);
puts(str2);
str[0] = (char)('繁' >> 8);
str[1] = (char)('繁' & 0xff);
puts(str);
}

在VC++6中的編譯信息:
--------------------Configuration: ccccc - Win32 Debug--------------------
Compiling...
sadsaad.c
Linking...

ccccc.exe - 0 error(s), 0 warning(s)

運行結果:
簡體中文
簡體ABC
繁體中文
Press any key to continue

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
 
 
©2010-2025 Arslanbar [手機版] [桌面版]
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。