给定一个4字节的数组(R,G,B,A),我试图把这个数组中的4个8位数字转换成32位的数字。
byte[] tab = {1,2,3,4};
转换为二进制8位:
然后,我的方法应返回一个字节数组,如:
newTab = {00000001_00000010_00000011_00000100};
由于某些原因,我试图在不使用String连接字节的情况下完成此操作。
我已经尝试过使用二元运算符,例如〈〈、〉〉或|,但如果没有成功...
到目前为止,我代码如下所示:
byte[] tab = {1,2,3,4};
int tmp,tabToInt = 0;
for (int x = 0 ; x < tab.length ; ++x){
tmp = tmp << (tab.length - 1 - x)*8;
byteToInt = byteToInt | tmp;
}
return tabToInt;
但它似乎不起作用,更不用说负字节了...(如-1 = 0 b11111111)
提前感谢您的回答!
2条答案
按热度按时间qpgpyjmq1#
您可以像这样使用
ByteBuffer
。输出功率
sbtkgmzw2#
ByteBuffer
可以做到这一点,但只有当你得到传递至少4个字节。您的代码存在两个问题:
tmp = tab[x] << (tab.length - 1 - x)*8;
。你的代码片段除了问它的长度之外,从来没有对tab
做过任何事情。int
,所以,0b1111 1111
,如果你试图对它做<< 8
,java首先把-1字节转换成-1 int(现在是321位),然后将其左移8位,现在是24个1位,后面是8个0位。然后将其按位OR到目标中,因此现在的目标大多数是1位。要将一个字节转换为没有**“符号扩展”的int**,(b & 0xFF
可以这样做: