我不明白为什么一个字节可以采用的最低值-128.我可以看到最高值是127,因为它是01111111二进制的,但是如何-128只用8位表示,其中一个用于符号?正128已经是8位,即10000000,然后你需要第9位来表示负号.
请有人帮我解释一下这个问题.
在不使用任何第三方库的情况下,如何将byte []转换为Byte [],并将Byte []转换为byte []?有没有办法快速使用标准库?
我需要将对象转换为byte []以存储在Tokyo Cabinet键值存储中.当从键值存储区读取时,我还需要将byte []取消对象.
那里有什么包可以帮我完成这项任务吗?或者是我自己实施的最佳解决方案?
字节数组和字节缓冲区有什么区别?
此外,在什么情况下应该优先于另一个?
[我的用例是用于在java中开发的Web应用程序].
我有一个类,我想检查它的字段并最终报告每个字段占用的字节数.我假设所有字段都是Int32,byte等类型.
如何轻松找出该字段占用的字节数?
我需要这样的东西:
Int32 a;
// int a_size = a.GetSizeInBytes;
// a_size should be 4
Run Code Online (Sandbox Code Playgroud) 可能重复:
C宏定义确定大端或小端机器?
int main()
{
int x = 1;
char *y = (char*)&x;
printf("%c\n",*y+48);
}
Run Code Online (Sandbox Code Playgroud)
如果它是小端,它将打印1.如果它是大端,它将打印0.这是正确的吗?或者将char*设置为int x始终指向最低有效位,而不管字节顺序如何?
在Java中,没有无符号字节.
使用某些低级代码时,有时需要处理大于128的无符号值的字节,这会导致Java将其解释为负数,因为MSB用于符号.
解决这个问题的好方法是什么?(说不要使用Java不是一个选项)
从以下代码开始......
byte foo = 1;
byte fooFoo = foo + foo;
Run Code Online (Sandbox Code Playgroud)
当我尝试编译此代码时,我将收到以下错误...
错误:(5,27)java:不兼容的类型:从int到byte的可能有损转换
......但如果foo是最终的......
final byte foo = 1;
final byte fooFoo = foo + foo;
Run Code Online (Sandbox Code Playgroud)
该文件将成功编译.
转到以下代码......
final byte[] fooArray = new byte[1];
fooArray[0] = 1;
final byte foo = fooArray[0];
fooArray[0] = 127;
System.out.println("foo is: " + foo);
Run Code Online (Sandbox Code Playgroud)
......会打印出来的
foo is: 1
Run Code Online (Sandbox Code Playgroud)
......很好.该值将复制到最终变量,不能再更改.使用数组中的值不会更改foo(正如预期的那样...)的值.
为什么以下需要演员?
final byte[] fooArray = new byte[1];
fooArray[0] = 1;
final byte foo = fooArray[0];
final byte fooFoo = foo + …Run Code Online (Sandbox Code Playgroud) 由于一些莫名其妙的原因,byte原始类型是用Java签名的.这意味着有效值为-128..127而不是通常的0..255范围,表示一个字节中的8个有效位(没有符号位).
这意味着所有字节操作代码通常进行整数计算并最终屏蔽掉最后8位.
我想知道是否存在任何真实生活场景,其中Java byte原始类型完全适合,或者它是否只是一个完全无用的设计决策?
编辑:唯一的实际用例是本机代码的单字节占位符.换句话说,不要将其作为Java代码中的字节进行操作.
编辑:我现在已经看到一个内部紧密循环需要除以7(数字0..32)的位置,因此可以使用字节作为数据类型来完成查找表,以便考虑L1缓存使用时内存使用率保持较低.这不是指签名/无签名,而是实际使用的情况.
我想尝试python BytesIO类.
作为一个实验,我尝试写入内存中的zip文件,然后从该zip文件中读取字节.因此gzip,我传入一个BytesIO对象,而不是传入一个文件对象.这是整个脚本:
from io import BytesIO
import gzip
# write bytes to zip file in memory
myio = BytesIO()
g = gzip.GzipFile(fileobj=myio, mode='wb')
g.write(b"does it work")
g.close()
# read bytes from zip file in memory
g = gzip.GzipFile(fileobj=myio, mode='rb')
result = g.read()
g.close()
print(result)
Run Code Online (Sandbox Code Playgroud)
但它正在返回一个空bytes对象result.这在Python 2.7和3.4中都会发生.我错过了什么?