CString::GetLength()获得字节数的正确方法介绍
CString::GetLength()获得字节数的正确方法介绍
前段时间,做http协议上传文件及断点续传控件时,在客户端采用C++调用CHttpConnection、CHttpFile进行文件上传。移植到Unicode编码时,上传得到的文件总是小于正常文件。最终发现问题出在CString::GetLength()方法上。当采用Unicode编码时,而且http header字符串中出现了中文或其其他多字节字符,该方法仍旧只返回字符数,而不是实际的字节数,这样在http header中的信息会比实际的少,导致http发送的数据小于预期的。
按照MSDN的说吗,在选用MBCS多字节字符串编码时,该方法会得到正确的字节数。此时没有问题。
For multibyte charactersets (MBCS), GetLength counts each 8-bit character; that is, a lead and trailbyte in one multibyte character are counted as two bytes.
但是在Unicode编码下,一旦出现中文字符,该方法就会少统计。
我试用最多的解决方法是:
1 CString str("abc我");
2 DWORD le0 = str.GetLength(); // 返回4,不是想要的字节数
3 // 这样处理就对了。先用CStringA类转化成多字节字符串。
4 le0 = CStringA(str).GetLength();
另外,也有人这样用,也可以。比上面效率高。
1 DWORD le0 = str.GetLength() * sizeof(TCHAR);
这种用法在MBCS环境下可以省略。在Unicode下,所有字符(包括ascii及中文字符),每个字符都被定义为WHAR,即双字节Unicode字符。该方法也正确。
CString::GetLength()获得字节数的正确方法介绍相关推荐
- Javascript 获取字符串字节数的多种方法
第一种:(通过String对象的charCodeAt方法) String.prototype.getBytesLength = function() { var length = 0; for(i = ...
- 关于C语言中的结构体所占的字节数 sizeof(struct)
C语言中的结构体所占的字节数 ,用sizeof求一个结构体的大小 C语言中用sizeof求结构体所占字节数的详细方法. 一.非嵌套结构体 struct one{char a; // 1(char所占字 ...
- java字节数_Java各种类型占用的字节数
数据类型 大小(二进制位数) 范围 默认值 byte(字节) 8 -128 - 127 0 shot(短整型) 16 -32768 - 32768 0 int(整型) 32 -2147483648-2 ...
- JAVA基本数据类型所占字节数是多少?
byte 1字节 short 2字节 int 4字节 long 8字节 ...
- java 字符类型 字节数_JAVA基本数据类型所占字节数是多少?
byte 1字节 short 2字节 int 4字节 long 8字节 char 2字节(C语言中是1字节)可以存储一个汉字 float 4字节 doub ...
- java中shot占几个字节_Java 占用字节数
数据类型 大小(二进制位数) 范围 默认值 byte(字节) 8 -128 - 127 0 shot(短整型) 16 -32768 - 32768 0 int(整型) 32 -2147483648-2 ...
- c语言中布尔类型占几个字节,JAVA基本数据类型所占字节数是多少?
byte 1字节 short 2字节 int 4字节 long 8字节 char 2字节(C语言中是1字节)可以存储一个汉字 float 4字节 doub ...
- Java 将byte转换kb_【Java】把字节数B转化为KB、MB、GB的方法
在文件处理的系统中,很容易就能通过一些系统自带的方法取出其大小,问题是这个大小往往只是一个字节数B. 如果要把这个字节数转化为KB.MB.GB的最终呈现给用户,则涉及到整除与取余的算术运算. 方法如下 ...
- python os write_Python 3:写入方法与os.write返回的字节数
我想创建一个包含许多"页面"的文本文件,并将每个页面的字节偏移记录在一个单独的文件中.为此,我将字符串打印到主输出文件并使用bytes_written = file.write(s ...
最新文章
- python读取浮点数与源文件不同
- opencv+python读写视频流
- java visualvm分析_使用VisualVM分析性能
- Objective C学习总结(二)
- centos安装redis并客户端连接_网络共享打印机图文教程,电脑客户端连接安装设置共享打印机方法...
- mysql中出现乱码问题_Mysql中文乱码问题完美解决方案
- Facebook 公司:如何清除 960 万句“脏话”?
- Leetcode 853 车队
- 单片机串口通信c语言程序,pc计算机与单片机串口通信源程序
- QModel-BIM-Revit模型轻量化产品介绍
- 健身健美减脂、脱水、充碳记录
- 微服务_服务网关(Gateway)
- arping指令即其参数对应的功能
- 一个小小的猜数游戏(挺无聊的,可以运行试试)
- 汽车基础软件赛道正在经历一轮洗牌
- java校验文件格式_java验证文件格式工具类(获取文件真实格式)
- 《万历十五年》--黄仁宇
- 5.4. rc1,rc2,rc4
- 李宏毅机器学习笔记(5-8)
- netstat -anp |awk |cut 通过pid获取应用程序的端口号