|   | 
              
                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
 |