2016-04-27 22 views
3

我正在研究一个android应用程序。我在库中使用了一个静态函数,它需要byte[]作为参数。有没有办法从byte []转换为long []

我用于传递含有36个字节的硬代码字节数组:

new byte[]{-13, 35, -92, -79, 47, -51, -57, 39, ......}; 

但在最新版本,他们改变了功能采取long[]代替。所以我不能再传递我的字节数组了。

如何将我保存的字节[]转换为长[],以便仍然使用此功能和以前相同的值?

是否有从byte[]long[]的转换?据我所知,'byte []'可以转换为long,但不能转换为long数组。

任何帮助是极大的赞赏

+0

那么你总是可以加宽。所以只是简单地将它转移到一个长阵列? – 3kings

+0

显然如果我只是将它转移到一个很长的数组中,值会改变。因为该功能将停止正常行为。问题是我没有对图书馆的可见性,并且他们的支持需要很长时间才能做出回应 – Youssef

+3

不清楚你正在使用哪个库或它的语义。数组中的每个“long”是否与之前版本中的八个字节相对应?还是一对一? – hexafraction

回答

1

我想你会的所有值需要将4个字节转换为一个长。所以最简单的解决方案就是使用ByteBuffers。

long[] byteToLong(byte[] array) { 
    ByteBuffer byteBuffer = ByteBuffer.wrap(array); 
    LongBuffer longBuffer = byteBuffer.asLongBuffer(); 
    long[] result = new long[longBuffer.capacity()]; 
    longBuffer.get(result); 
    return result; 
} 

注意:这会产生BigEndian值 - 不确定您的API需要什么。

+0

谢谢,这工作。 – Youssef

0

这是你应该已经尝试过了ID IDE最简单的问题之一。

byte[] bytesArr = { 0, 6, 36, -84, 113, 125, -118, -47 }; 
    long[] longArr = new long[bytesArr.length]; 

    for (int i = 0; i < bytesArr.length; i++) { 
     longArr[i] = bytesArr[i]; 
    } 

另外,也可以转换长[]为byte [],但你将失去其不在即-128字节的范围内,以127

相关问题