我已生成一个安全的随机数,并将其值放入一个字节.这是我的代码.
SecureRandom ranGen = new SecureRandom();
byte[] rno = new byte[4];
ranGen.nextBytes(rno);
int i = rno[0].intValue();
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
byte cannot be dereferenced
Run Code Online (Sandbox Code Playgroud) 我有一个byte[]我从文件中读取的内容,我希望从中获取int两个字节.这是一个例子:
byte[] bytes = new byte[] {(byte)0x00, (byte)0x2F, (byte)0x01, (byte)0x10, (byte)0x6F};
int value = bytes.getInt(2,4); //This method doesn't exist
Run Code Online (Sandbox Code Playgroud)
这应该value等于0x0110或272十进制.但显然,byte[].getInt()不存在.我怎样才能完成这项任务?
上面的数组只是一个例子.实际值对我来说不了解.
我正在将进程移植到Java.已经有了C#和C++的工作版本.
我在C#中有一个部分,我使用Marshal.Copy(...)将64个字节转换为512个字节,并在C++中使用memmove(...)来执行相同的操作.Java中有哪些可以实现相同的结果?我需要相同顺序的二进制信息,就像字节而不是long一样.
编辑:
我移植到Java的原因是利用Java自然具有的可移植性.我不想使用本机代码.
另一件事.由于Java不包含无符号值,因此我需要稍微更改我正在请求的内容.我想从64个long(C#和C++中的ulongs)中的每一个获得8个无符号字节值,以便稍后我可以在数组中的索引处使用这些值.这需要发生数千次,因此最快的方式将是最好的方式.
我想知道这里记录的解决方案是否仍然是解决方案还是有其他方式从4个字节获取一个int?
谢谢.
编辑:我从套接字.read获取byte []
编辑:int recvMsgSize = in.read(Data, 0, BufferSize);如果recvMsgSize为-1我知道连接已被删除.
我在使用DataInputStream而不是InputStream时如何检测到这一点?
谢谢.
编辑:对于接受正确答案的yoyo道歉.但是在mihi更新了最终响应之后,看起来该方法是可靠的并且减少了扩展编码,并且在我看来是最佳实践.
我需要在Java代码中将2个字节(2的补码)转换为int.我该怎么做?
toInt(byte hb, byte lb)
{
}
好吧,所以我正在开发这个虚拟机,它有64 kbs的内存.我正在使用byte []数组作为内存,我有一个问题.如何将2个字节转换为短或4个字节到Int32?
可能重复:
将4个字节转换为int
我正在尝试使用这里找到的一些解决方案将4个字节打包到一个int中,但它似乎不适用于我的一个测试.
这是我正在使用的代码:
public static int pack(int c1, int c2, int c3, int c4)
{
return (c1 << 24) | (c2 << 16) | (c3 << 8) | (c4);
}
Run Code Online (Sandbox Code Playgroud)
现在,当我在像0x34,0x68,0x77和0x23这样简单的东西上使用它时,我得到了我所期望的:0x34687723.但是当我在0xBA,0xAD,0xBE和0xEF上使用它时,我得到了一些东西.有谁看到问题可能是什么?
编辑
上面的代码能够给我我想要的东西,我在下面提到的"错误值"只是以十进制形式表示0xBAADBEEF的另一种方式.