如何在Java中使用sha256散列一些字符串?有人知道这个免费图书馆吗?
我们知道,例如两个幂的模数可以这样表达:
x % 2 inpower n == x & (2 inpower n - 1).
Run Code Online (Sandbox Code Playgroud)
例子:
x % 2 == x & 1
x % 4 == x & 3
x % 8 == x & 7
Run Code Online (Sandbox Code Playgroud)
两个数字的一般非权力怎么样?
让我们说:
x%7 ==?
我试图了解Java如何在内部存储整数.我知道所有java原始整数都是有符号的(除了短?).这意味着该字节的字节中可用的位数较少.
我的问题是,所有整数(正数和负数)都存储为二进制补码或只是二进制补码中的负数吗?
我看到规格说明了x bit two's complement number.但我经常感到困惑.
例如:
int x = 15; // Stored as binary as is? 00000000 00000000 00000000 00001111?
int y = -22; // Stored as two complemented value? 11111111 11111111 11111111 11101010
Run Code Online (Sandbox Code Playgroud)
编辑
要清楚, x = 15
In binary as is: `00000000 00000000 00000000 00001111'
Two's complement: `11111111 11111111 11111111 11110001`
Run Code Online (Sandbox Code Playgroud)
因此,如果您的答案是 all数字存储为两个补码,那么:
int x = 15; // 11111111 11111111 11111111 11110001
int y = -22 // 11111111 11111111 11111111 11101010
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此时可以为我们生成音频样本的方式,但如果将来发生变化,这可能是一个适合它的地方.我知道JavaFX有一些这样的东西,例如AudioSpectrumListener,但仍然不能直接访问样本.
我正在javax.sound.sampled用于播放和/或录制,但我想对音频做些什么.
也许我想直观地展示它或以某种方式处理它.
如何使用Java Sound访问音频样本数据?
也可以看看:
我发现在样本开始之前假设所有PCM wav音频文件都有44个字节的标题数据是危险的.虽然这很常见,但许多应用程序(例如ffmpeg)将生成带有46字节标头的wav,并忽略此事实,而处理将导致文件损坏且不可读.但是,如何判断标题实际存在多长时间?
显然有一种方法可以做到这一点,但我搜索并发现很少有关于此的讨论.根据作者自己的背景,很多音频项目假设44(或相反,46).
我以缓冲区(字节)的形式获取图像数据,但我想将其转换为 base64 字符串。数据是在 JSONArray 中接收的,就像这样
JSONArray : `[53,57,51,47,53,57,51,55,50,98,98,54,53,51,54,97,102,101,53,101,102,54,57,54,53,54,53,51,102,98,53,99,98,98,99,51,98,48,52,57,56,52,52,101,54,48,50,99,56,55,101,54,53,97,51,102,56,49,56,57,56,98,102,56,49,57,97,57]`
Run Code Online (Sandbox Code Playgroud)
为此,我将 JSONArray 复制到 中"byte" array,如下所示:
JSONArray bytearray_json = record.getJSONObject("image").getJSONArray("data");
byte[] bytes = new byte[bytearray_json.length()];
for (int i =0; i < bytearray_json.length(); i++ ) {
bytes[i] = (byte)bytearray_json.get(i);
}
String base_64 = Base64.encodeToString(bytes,Base64.DEFAULT);
Run Code Online (Sandbox Code Playgroud)
但我得到一个例外:Cannot cast Integer to byte
我不能这样做,bytearray_json.get(i).toString().getBytes();因为它返回一个Byte Array.
我该如何解决这个问题?
当我说0b11111111是java中的一个字节时,它说"无法将int转换为byte",这是因为据我所知,11111111 = 256,java中的字节是有符号的,从-128到127.但是,如果一个字节只是8位数据,那么不是11111111 8位?我知道11111111可能是一个整数,但在我的情况下,它必须表示为一个字节,因为它必须以字节形式发送到一个文件.那么如何将一个带有位11111111的字节发送到一个文件(顺便说一句,这是我的问题)?当我尝试打印二进制值-1时,我得到11111111111111111111111111111111,为什么?我真的不明白签名字节是如何工作的.