如何java 定义byte一个 1 byte 的整形

2007年6月 总版技术专家分月排行榜第三
2007年6月 VC/MFC大版内专家分月排行榜第一
匿名用户不能发表回复!|delphi中将 4 个 Byte 合成 1 个 Integer 的五种方法 - ╰★张志峰★╮ - 博客园
水滴石川,积少成多。
posts - 1227, comments - 75, trackbacks - 0, articles - 0
有4个字节类型的值,用移位或逻辑运算符怎么合成一个整数?比如 $FFEEDDCC。高$FF$EE$DD$CC低&
//方法 1: 共用内存procedure TForm1.Button1Click(Sender: TObject);varbf: record b1,b2,b3,b4: Bi: Ibeginbf.b1 := $CC;bf.b2 := $DD;bf.b3 := $EE;bf.b4 := $FF;ShowMessageFmt('%x', [i]);//FFEEDDCC
//方法 2: 位运算procedure TForm1.Button2Click(Sender: TObject);vari: Ibegini := $CC or ($DD shl 8) or ($EE shl 16) or ($FF shl 24);//不用括号也可ShowMessageFmt('%x', [i]);//FFEEDDCC
//方法 3: 使用函数procedure TForm1.Button3Click(Sender: TObject);vari: Ibegini := MakeLong(MakeWord($CC,$DD),MakeWord($EE,$FF));ShowMessageFmt('%x', [i]);//FFEEDDCC//方法 4: 从静态数组...procedure TForm1.Button4Click(Sender: TObject);varbs: array[0..3] of BP: PIbeginbs[0] := $CC;bs[1] := $DD;bs[2] := $EE;bs[3] := $FF;P := @ShowMessageFmt('%x', [P^]);//FFEEDDCC
//方法 5: 从动态数组...procedure TForm1.Button5Click(Sender: TObject);varbs: array of BP: PIbeginSetLength(bs, 4);bs[0] := $CC;bs[1] := $DD;bs[2] := $EE;bs[3] := $FF;P := @bs[0];ShowMessageFmt('%x', [P^]);//FFEEDDC
-------------------------------------------------------------------------------1.可以直接Copymemory或者Move2.可以用变体类型的结构体.type& &TWordOfInt = array[0..2-1] of WORD;& &TByteOfInt = array[0..4-1] of B& &TIntRec = packed record //定义一个辅助类型,这样转换非常快,而且方便& &&&case Integer of& && & 0: (IntValue: Integer);& && & 1: (Low, High: Word);& && & 2: (Words: TWordOfInt);& && & 3: (Bytes: TByteOfInt);& &//方法一,借助TIntRec,来转换var& &Int : I& &Bytes : TByteOfIbegin& &int := 100;& &Bytes := TIntRec(int).B//integer转字节数组& &Int :=&&TIntRec(Bytes).IntV //Byte数组转Integer//方法二, 直接用TIntRec,不转换.根本不耗费一点点CPU的时间var& &value : TIntRbegin& &value.IntValue := 100; //看成Integer& &//下面是看成Byte数组用& &value.Bytes[0] := 1;& &value.Bytes[1] := 1;& &value.Bytes[2] := 1;& &value.Bytes[3] := 1;求java编程 字节byte怎么转换成整形int?_百度知道
求java编程 字节byte怎么转换成整形int?
我有更好的答案
有点困,没精神给你细解释,参考1.byte的大小为8bits而int的大小为32bits 2.java的二进制采用的是补码形式 在这里先温习下计算机基础理论 byte是一个字节保存的,有8个位,即8个0、1。 8位的第一个位是符号位, 也就是说代表的是数字1 代表的就是-1 所以正数最大位,也就是数字127 负数最大为,也就是数字-128 上面说的是二进制原码,但是在java中采用的是补码的形式,下面介绍下什么是补码 1、反码: 一个数如果是正,则它的反码与原码相同; 一个数如果是负,则符号位为1,其余各位是对原码取反; 2、补码:利用溢出,我们可以将减法变成加法 对于十进制数,从9得到5可用减法: 9-4=5 因为4+6=10,我们可以将6作为4的补数 改写为加法: 9+6=15(去掉高位1,也就是减10)得到5. 对于十六进制数,从c到5可用减法: c-7=5 因为7+9=16 将9作为7的补数 改写为加法: c+9=15(去掉高位1,也就是减16)得到5. 在计算机中,如果我们用1个字节表示一个数,一个字节有8位,超过8位就进1,在内存中情况为(),进位1被丢弃。 ⑴一个数为正,则它的原码、反码、补码相同 ⑵一个数为负,刚符号位为1,其余各位是对原码取反,然后整个数加1 - 1的原码为
- 1的反码为
+ 1 - 1的补码为
0的反码为 (正零和负零的反码相同) +1 0的补码为 (舍掉打头的1,正零和负零的补码相同) Integer.toHexString的参数是int,如果不进行&0xff,那么当一个byte会转换成int时,由于int是32位,而byte只有8位这时会进行补位, 例如补码的十进制数为-1转换为int时变为好多1啊,呵呵!即0xffffffff但是这个数是不对的,这种补位就会造成误差。 和0xff相与后,高24比特就会被清0了,结果就对了。 ---- Java中的一个byte,其范围是-128~127的,而Integer.toHexString的参数本来是int,如果不进行&0xff,那么当一个byte会转换成int时,对于负数,会做位扩展,举例来说,一个byte的-1(即0xff),会被转换成int的-1(即0xffffffff),那么转化出的结果就不是我们想要的了。 而0xff默认是整形,所以,一个byte跟0xff相与会先将那个byte转化成整形运算,这样,结果中的高的24个比特就总会被清0,于是结果总是我们想要的。
采纳率:37%
yte a = 1; int b = 自动转换了java 5; int b = 编译器会自动转换成这个int b = Integer.value(a).0之后引入了自动装箱和拆箱byte a = 1
5.0版本可以自动转换
为您推荐:
其他类似问题
java编程的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。如何把一个字符数组中的四个字节写入到一个整形变量中_百度知道
如何把一个字符数组中的四个字节写入到一个整形变量中
我有更好的答案
},因为ASCII码表里只有0-9的ASCII码,它们比正常的多‘0’的值;a&#39,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 '\,'p'p'若小于数组长度;,',‘h'即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中提供的字符个数大于数组长度,则按语法错误处理;,'I'm' &#39。char str[10]={ &#39,也就是48;y'a','这样就可以了,不过这样只使用于1位数的情况;,'0',',' '0&#39。字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素;;&p&gtb[0][0]=a+',&#39
采纳率:97%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。2009年8月 C/C++大版内专家分月排行榜第三2009年7月 C/C++大版内专家分月排行榜第三2009年2月 C/C++大版内专家分月排行榜第三
匿名用户不能发表回复!|}

我要回帖

更多关于 java 定义byte 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信