一,C++语言的内建类型中没“BYTE”这么个类型。
BYTE是WINDOWS Platform SDK中windef.h里面定义的:
typedef unsigned char BYTE;

二,char 与 byte(JAVA)

相同:c++中char型数组占一个字节。byte也占8个bit。

不同:char 是字符型(-127 - 128;byte是字节型(0 - 255)  .


JAVA中byte类型的介绍:

Java也提供了一个byte数据类型,并且是基本类型。java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte。

不幸的是,byte的用作计数的时间远少于用表达基本内存单元的时间。比如从stream里读入一个双字节字符,我们先收到2个byte。为了把byte转换成适当的形式,需要对byte值做一些比较,比如判断字符集要比较其是否在某个编码范围内,比如GBK 0x8140~0xFEFE,然后new适当的string。

signed byte 把 0x00 ~ 0xff 映射成0~127 -128~-1两段,注意当与literal比较时,java自动将literal识别成int

可以用 下面的小程序来验证:

1 public class JavaByte
2 {
3 public static void main(String[] args)
4 {
5 byte b = 0;
6 for ( int i = 0; i <= 0xff; ++i )
7 {
8 b = (byte)i;
9 System.out.print(" "+i+":"+b+", ");
10 }
11 }
12 }

当收到(0xC7B0)这个GBK字符时,要判断 0x81 <= 0xC7 <= 0xFE 是否成立,实际变成判断 -127 < -57 < -2,唔,万幸,可以直接比较 low < ch < high。如果要判断 0x00 <= 0xC7 <= 0x80 (ASC Char),这回麻烦了,变成判断 (0 <= -57 <= 127) || ( 0x57 == -128 )。比较简单的办法用 (b+256)%256的办法令其值回到0~255,或者用&0xff并赋给一个int。

考虑到jvm里的byte其实也是32位的,所以在计划用byte的地方,直接用integer并不会有什么实际的损失,而 DataInputStream也提供了一个readUnsignedByte()方法返回的是int。所以真正的解决方案是忘掉byte,直接上 int。

最新文章

  1. SQL Prompt
  2. 转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
  3. java提高篇---Iterator
  4. 【Merge Sorted Array】cpp
  5. IDEA加密(转)
  6. VB6-表格控件MSHFlexGrid 实用代码
  7. angularjs项目中关于服务的应用
  8. %1 不是有效的 Win32 应用程序
  9. 在SSH框架中使用Spring的好处(转)
  10. JavaScript常见封装方法
  11. Ubuntu安装配置protobuf 2.5
  12. Mysql的子查询相关知识,少但是精
  13. [Swift]LeetCode852. 山脉数组的峰顶索引 | Peak Index in a Mountain Array
  14. MX4_ADB
  15. js_为元素动态注册事件
  16. set练习
  17. linux 线程的同步 一 (互斥量和信号量)
  18. NDK 链接第三方静态库的方法
  19. Nginx(四)-- 配置文件之location
  20. 异步执行任务SimpleAsyncTaskExecutor详解

热门文章

  1. JS 表单自动提交
  2. POJ 3067【树状数组】
  3. 点击a标签 跳到当前页面指定div
  4. 换装demo时美术遇到的问题详解
  5. C#基础知识回顾
  6. 解决element 照片墙上传时回显问题
  7. mybits like查询写法
  8. D. Merge Equals(from Educational Codeforces Round 42 (Rated for Div. 2))
  9. html 5 video audio
  10. ZROI #364. 【2018普转提day18专题】嘤嘤嘤