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中的汉字编码成两个字节啊?的主要内容,如果未能解决你的问题,请参考以下文章