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()获得字节数的正确方法介绍相关推荐

  1. Javascript 获取字符串字节数的多种方法

    第一种:(通过String对象的charCodeAt方法) String.prototype.getBytesLength = function() { var length = 0; for(i = ...

  2. 关于C语言中的结构体所占的字节数 sizeof(struct)

    C语言中的结构体所占的字节数 ,用sizeof求一个结构体的大小 C语言中用sizeof求结构体所占字节数的详细方法. 一.非嵌套结构体 struct one{char a; // 1(char所占字 ...

  3. java字节数_Java各种类型占用的字节数

    数据类型 大小(二进制位数) 范围 默认值 byte(字节) 8 -128 - 127 0 shot(短整型) 16 -32768 - 32768 0 int(整型) 32 -2147483648-2 ...

  4. JAVA基本数据类型所占字节数是多少?

    byte     1字节                short    2字节                int      4字节                long     8字节     ...

  5. java 字符类型 字节数_JAVA基本数据类型所占字节数是多少?

    byte     1字节 short    2字节 int      4字节 long     8字节 char     2字节(C语言中是1字节)可以存储一个汉字 float    4字节 doub ...

  6. java中shot占几个字节_Java 占用字节数

    数据类型 大小(二进制位数) 范围 默认值 byte(字节) 8 -128 - 127 0 shot(短整型) 16 -32768 - 32768 0 int(整型) 32 -2147483648-2 ...

  7. c语言中布尔类型占几个字节,JAVA基本数据类型所占字节数是多少?

    byte     1字节 short    2字节 int      4字节 long     8字节 char     2字节(C语言中是1字节)可以存储一个汉字 float    4字节 doub ...

  8. Java 将byte转换kb_【Java】把字节数B转化为KB、MB、GB的方法

    在文件处理的系统中,很容易就能通过一些系统自带的方法取出其大小,问题是这个大小往往只是一个字节数B. 如果要把这个字节数转化为KB.MB.GB的最终呈现给用户,则涉及到整除与取余的算术运算. 方法如下 ...

  9. python os write_Python 3:写入方法与os.write返回的字节数

    我想创建一个包含许多"页面"的文本文件,并将每个页面的字节偏移记录在一个单独的文件中.为此,我将字符串打印到主输出文件并使用bytes_written = file.write(s ...

最新文章

  1. python读取浮点数与源文件不同
  2. opencv+python读写视频流
  3. java visualvm分析_使用VisualVM分析性能
  4. Objective C学习总结(二)
  5. centos安装redis并客户端连接_网络共享打印机图文教程,电脑客户端连接安装设置共享打印机方法...
  6. mysql中出现乱码问题_Mysql中文乱码问题完美解决方案
  7. Facebook 公司:如何清除 960 万句“脏话”?
  8. Leetcode 853 车队
  9. 单片机串口通信c语言程序,pc计算机与单片机串口通信源程序
  10. QModel-BIM-Revit模型轻量化产品介绍
  11. 健身健美减脂、脱水、充碳记录
  12. 微服务_服务网关(Gateway)
  13. arping指令即其参数对应的功能
  14. 一个小小的猜数游戏(挺无聊的,可以运行试试)
  15. 汽车基础软件赛道正在经历一轮洗牌
  16. java校验文件格式_java验证文件格式工具类(获取文件真实格式)
  17. 《万历十五年》--黄仁宇
  18. 5.4. rc1,rc2,rc4
  19. 李宏毅机器学习笔记(5-8)
  20. netstat -anp |awk |cut 通过pid获取应用程序的端口号

热门文章

  1. Java之美[从菜鸟到高手演变]之Exception
  2. JavaScript获取文本框光标的像素位置(转载)
  3. 改进我个人知识管理手段
  4. Linux之chmod命令
  5. linux常用命令速查手册PDF下载
  6. Spring中的BeanDefinition
  7. Android wifi carlife,carlife可以无线连接吗?carlife蓝牙连接流程
  8. MySQL查询优化之索引
  9. iOS - Swift NSUserDefaults 数据存储
  10. Xshell中文乱码问题