我对这两个功能有些困难:byteArrayToInt和intToByteArray.
问题是,如果我使用一个来到另一个并且结果到达前者,结果会有所不同,您可以从下面的示例中看到.
我找不到代码中的错误.任何想法都非常受欢迎.谢谢.
public static void main(String[] args)
{
int a = 123;
byte[] aBytes = intToByteArray(a);
int a2 = byteArrayToInt(aBytes);
System.out.println(a); // prints '123'
System.out.println(aBytes); // prints '[B@459189e1'
System.out.println(a2); // prints '2063597568
System.out.println(intToByteArray(a2)); // prints '[B@459189e1'
}
public static int byteArrayToInt(byte[] b)
{
int value = 0;
for (int i = 0; i < 4; i++) {
int shift = (4 - 1 - i) * 8;
value += (b[i] & 0x000000FF) << shift;
} …Run Code Online (Sandbox Code Playgroud) 我刚刚发现类中没有readUnsignedInt()方法RandomAccessFile.为什么?是否有任何解决方法从文件中读取unsigned int?
编辑:
我想从文件中读取unsigned int并将其放入一个长空间.
EDIT2:
不能使用readLong().它将读取8个字节而不是4个字节.文件中的数据在4字节范围内具有无符号整数.
EDIT3:
在这里找到答案:http://www.petefreitag.com/item/183.cfm
Edit4:
如果数据文件是little-endian怎么样?我们需要先换位?
我有一个22字节的帧.帧是来自加速度计的输入流,通过蓝牙.加速度计读数是一个16位数,分为两个字节.
当我尝试将字节与缓冲区[1] +缓冲区[2]合并,而不是添加字节时,它只是将结果并排放置.所以1 + 2 = 12.
有人能告诉我如何组合这两个字节来获得原始数字.(顺便说一句,字节是以小端发送的)
谢谢
我正在使用哈希集,其中我存储整数数组(32位).这意味着我需要一个算法来散列整数数组.我正在寻找一个32位整数(C#int)哈希.
我已经尝试并编辑了两个现有的算法,你可以看到底部的四个版本,包括它们的基准.
我的问题如下:
1.您认为底层算法是否适用于此目的?
2.有没有更好的算法可用于此目的?
计划信息
16 entries整数smaller than 10,但两者都必须支持更大的值.我可以说有机会发生的最大值是200个条目和值为20的整数.基准和代码
下面是我的基准测试和代码,从我的程序中的最差到最佳性能.
356525const uint seed = 144MurMurHash3使用从坐标直接检索的字节
代码等于https://gist.github.com/automatonic/3725443 使用以下代码检索字节数组:
int size = Marshal.SizeOf(typeof(Coordinates2D));
int length = carCoords.Length;
Byte[] bytes = new Byte[size * length];
for (int i = 0; i < length; ++i)
{
GCHandle pinStructure = GCHandle.Alloc(carCoords[i], GCHandleType.Pinned);
Marshal.Copy(pinStructure.AddrOfPinnedObject(), bytes, i*size, size);
pinStructure.Free();
}
// Hash the byte array
return MurMurHash3.Hash(new System.IO.MemoryStream(bytes)); …Run Code Online (Sandbox Code Playgroud) 好吧,所以我正在查找从字节数组转换为java中的数值的最佳方法是什么,我遇到了这个链接.第二个答案提到了ByteBuffer类的使用.对于那些不希望点击链接的人,最初问题是否我有:
byte[] by = new byte[8];
Run Code Online (Sandbox Code Playgroud)
如何将其转换为int?答案是......
ByteBuffer bb = ByteBuffer.wrap(new byte[] {0, 0, 0, 0, 0, 0, 0, 4});
long l = bb.getLong();
System.out.println(l);
Run Code Online (Sandbox Code Playgroud)
结果
4
Run Code Online (Sandbox Code Playgroud)
这真是太棒了,但我只是想在走这条路之前确认一些事情.
假设我之前读取的字节数组长度为8个字节.
byte[] oldByte = new byte[8];
Run Code Online (Sandbox Code Playgroud)
那我呢......
ByteBuffer bb = ByteBuffer.wrap(new byte[] {oldByte[2], oldByte[3]});
int intValue = bb.getInt();
Run Code Online (Sandbox Code Playgroud)
是否会以与前一个示例相同的方式读取/读取?
我正在从硬件设备读取8个字节的数据.我需要将它们转换为数值.我想我想将它们转换为长度,因为它应该适合8个字节.我对Java和低级数据类型操作不是很熟悉.我似乎有两个问题(除了几乎没有相关硬件的文档),字节期望是无符号的,所以我不能进行直接整数转换.我不确定它们是什么字节序.
任何意见,将不胜感激.
结束了这个(取自一些源代码,我可能应该在一周前阅读):
public static final long toLong (byte[] byteArray, int offset, int len)
{
long val = 0;
len = Math.min(len, 8);
for (int i = (len - 1); i >= 0; i--)
{
val <<= 8;
val |= (byteArray [offset + i] & 0x00FF);
}
return val;
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,它接收带有字节数组的数据报包,我需要获取它的信息并将其转换为对象.
我已阅读文档,并说它存储了每个信息的字节数组上的位置,但我似乎无法正确地将其解析为对象.最近有没有人做过类似的工作?