c语言言里一个汉子占两个字节,而在qt中一个汉子占4个字节,请教大神怎么把qt中的汉字编码成两个字节啊?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言言里一个汉子占两个字节,而在qt中一个汉子占4个字节,请教大神怎么把qt中的汉字编码成两个字节啊?相关的知识,希望对你有一定的参考价值。

我觉得你没有理解意思char[3]="汉"那是你的编辑器将你的汉字存成了GBK的两个字节。所以char[0] char[1]是汉字的GBK编码,而char[3]是\n。

你在qt里如果用char 而不是Qchar的话,其实是没有区别的,主要看你的ide编辑器用的是什么编码。如果用GBK还是一样,如果用utf-8那就不一样了。
个人感觉你是ide编码设置问题。
参考技术A C里面是GB码,qt里是UNICODE码。你找个UNICODE编码转GB码的表吧追问

在vc里 char ch[3]="汉";可以通过ch[0],ch[1]读出汉子的两个字节,但在qt里只能定义成char ch[4]="汉",二不能用ch[2],所以我就不知怎么读取汉字对应的两个字节了。您能否解决?

截取字符串

【需求说明】:

  编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉子不被截半个,如"我ABC" 4,因该截为"我AB",输入"我ABC汉DEF" 6,应该输出"我ABC",而不是"我ABC+汉的半个"

【需求分析】:

  容易产生困惑的是中文字符和英文字符,在这里需要考虑汉字和英文字符的占用字节数问题,中文字符占两个字节,英文字符占一个字节,理解了这个,就很容易完成本题了。

【需求实现】:

  直接进入源码吧,源码注释已解释很详细了

 1 package edu.aeon.algorithm;
 2 
 3 /**
 4  * @author lzj
 5  * 创建于: 2017年10月20日 上午12:00:52 by lzj
 6  * 需求/说明: 
 7  * 编写一个截取字符串的函数,输入为一个字符串和字节数,
 8  * 输出为按字节截取的字符串。但是要保证汉子不被截半个,
 9  * 如"我ABC" 4,因该截为"我AB",输入"我ABC汉DEF" 6,
10  * 应该输出"我ABC",而不是"我ABC+汉的半个"
11  */
12 public class Substr {
13     /**
14      * 
15      * at 2017年10月20日 上午12:02:51 by lzj
16      * @parameters1 String str 输入的要截取的字符串
17      * @parameters2 int byt 输入的要截取字符串的字节数
18      * @return void
19      * 函数说明:根据所传入要截取的字节数及字符串来截取满足需求的字符串
20      */
21     
22     private void substring(String str,int byt) {
23         String arr[] =new String[str.length()];
24         String stegx="[\\u4e00-\\u9fa5]";
25         int count=0; //字节计数器
26         for(int i=0;i<arr.length;i++) {
27             arr[i] = str.substring(i, i+1);
28             if(arr[i].matches(stegx)) {
29                 count=count+2; //如果arr[i]是汉字则字节计数器+2,因为一个汉字占两个字节
30             }else {
31                 count=count+1; //非汉子 字节计数器+1
32             }
33             if(count <= byt) {
34                 System.out.print(arr[i]); //打印出,注意是在循环里面,也就是循环打印出,非单个打印
35             }
36             /*
37              * 此处看需求、如果需求是打印出按n字节截取的所有字符串、
38              * 则将此处[code]到[/code]代码段的注释放开即可、将上
39              * 面一行if条件改为if(count < byt)即可,此处仅按照按需求
40              * 所以将[code]到[/code]代码段作为注释
41              * */
42             //[code]
43             /*else if(count == byt) {  
44                 System.out.print(arr[i]);
45                 count=0;
46                 System.out.println();
47             }else {
48                 count=0;
49                 System.out.println();
50             }*/
51             //[/code]
52         }
53     }
54     /**
55      * 
56      * at 2017年10月20日 上午12:07:15 by lzj
57      * @parameters1 String[] args
58      * @return void
59      */
60     public static void main(String[] args) {
61         //这里可以自己改造通过控制台输入,这个简单,我就不浪费时间了
62         Substr str=new Substr();
63         str.substring("我ABC汉DEF", 4);
64         System.out.println("\\n=====================================");
65         str.substring("我ABC汉DEF", 6);
66     }
67 }
单击“+”查看

【运行截图】:

  

 

以上是关于c语言言里一个汉子占两个字节,而在qt中一个汉子占4个字节,请教大神怎么把qt中的汉字编码成两个字节啊?的主要内容,如果未能解决你的问题,请参考以下文章

char型变量中能不能存储一个中文汉字,为什么?

编码解码

截取字符串

Windows核心编程字符编码详解

一个汉字占几个字符?

python基础语言以及if/while语句结构