黑马程序员技术交流社区

标题: 字节和int之间的转换,求教。。。 [打印本页]

作者: 马姗姗    时间: 2014-1-6 13:50
标题: 字节和int之间的转换,求教。。。
本帖最后由 马姗姗 于 2014-1-6 22:04 编辑

byte[] buffer ;
int[] databuf   =new int[buffer.length];

                for (int i = 0; i < buffer.length; i++) {
                        databuf = (int) ((buffer + 256) % 256);
                }
求大神解释下循环中的意思

作者: 悠然的我    时间: 2014-1-6 15:12
这么搞一下就该看明白了吧
byte[] buffer = {-128,-127,-2,-1,0,1,2,126,127};
int[] databuf = new int[buffer.length];
               
System.out.println(Byte.MIN_VALUE+"***"+Byte.MAX_VALUE);
for (int i = 0; i < buffer.length; i++)
{
        databuf[i] = (int) ((buffer[i] + 256) % 256);
        System.out.print(databuf[i]+",");
}
输出结果:
-128***127
128,129,254,255,0,1,2,126,127,
//这不就正好把byte类型转化成正数的int类型了,只不过负值被转化到了128~255之间。

作者: 小泉真也    时间: 2014-1-6 15:47
  1. byte[] buffer;//声明一个byte类,命名为buffer

  2. int[] databuf = new int[buffer.length];//创建一个int类型 名叫 databuf的数组,其元素个数为  buffer.length

  3. for (int i = 0; i < buffer.length; i++)
  4. {
  5.         databuf[i] = (int) ((buffer[i] + 256) % 256);
  6. }

  7. 循环的意思是:
  8. 【1】定义一个变量i等于0,判断i是否小于buffer.length,如果小于,执行下面的语句
  9. 【2】databuf[i] = (int) ((buffer[i] + 256) % 256);
  10.           先把 databuf数组中 角标是[i]的元素  与 256 相加的结果再和 256 求余,所得的结果强制转换成int类型,再把这个结果赋值 给databuf数组中 角标是[i]的这个元素
  11. 【3】然后i+1,再回到第二个条件,判断i是否小于buffer.length  如果小于,再循环一次【1】【2】;如果大于,那循环结束
复制代码



简单的分析了一下过程和内容,若有不足,见谅。先供你参考。
作者: 董月峰    时间: 2014-1-7 13:55
java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte。
int 是非负整数类型

databuf = (int) ((buffer + 256) % 256);
就是把负的byte数字转换成非负的
作者: 午夜b'Boy    时间: 2014-1-7 16:46
还可以这样搞法,还以为自动提升呢,真是看不懂




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2