- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是音乐调谐器应用程序中的代码摘录。创建一个byte []数组,将音频数据读入缓冲区数组,然后for循环遍历缓冲区并组合索引n
,n+1
处的值,以创建一个16位数字数组,该数组为长度的一半。
byte[] buffer = new byte[2*1200];
targetDataLine.read(buffer, 0, buffer.length)
for ( int i = 0; i < n; i+=2 ) {
int value = (short)((buffer[i]&0xFF) | ((buffer[i+1]&0xFF) << 8)); //**Don't understand**
a[i >> 1] = value;
}
&
,这是因为它将转换为32位数字。我想前24位用
1
填充(尽管我不知道为什么它不用零填充...不能用
1
开头改变数字的值吗?
000000000010
(2)毕竟与
111111110010
(-14)不同),因此
0xff
的目的是仅获取最后8位(即整个字节)。
buffer[i+1]
向左移动8位时,这使得
OR
时,来自
buffer[i+1]
的八位位于最高有效位,而来自
buffer[i]
的八位位于最低有效位。八位。我们最后得到一个格式为
buffer[i+1] + buffer[i]
的16位数字。 (我正在使用
+
,但我知道它更接近串联。)
OR
ing
buffer[i] | buffer[i+1] << 8
?除非我们以相同的方式拉回原始声音信息,否则这似乎会破坏原始声音信息。虽然我知道
OR
会将它们组合为一个值,但我看不到该值在以后的计算中如何有用或使用。以后访问此数据的唯一方法是其文字值:
diff += Math.abs(a[j]-a[i+j];
101
和
111
,则应该得到12,即
1100
。但是
101 | 111 << 3
给出的
111101
等于61。我最了解的是
101
(5)
|
111000
(56)与添加
5+56=61
相同。但是顺序很重要-反向
101 <<3 | 111
完全不同。我真的不明白当以这种方式对数据进行或运算时,数据如何保持有用。
OR
运算,则在生成的16位数字中,2 at处的位现在用作值而不是占位符。如果在运行
OR
之前我有一个负字节,那么在我的最终值后运算中,它现在会错误地表现为原始数字中包含正2⁷。
0xff
不会消除它,因为它保留了第八个带符号的字节,所以这不是问题吗?
1111
(-1)和
0101
在进行“或”运算时可能会给出
01011111
。但是
1111
并不代表POSITIVE
1111
,而是代表签名版本;但在最后的答案中,它现在是正2³。
1
,因此我怀疑它不会对计算产生太大影响(假设我们正在处理非常大的值(< cc>表示
diff +=
会很大-考虑到代码及其所依赖的比较,另外几个
diff
不应损害结果。所以这全都错了。我给了它更多的思考,确实很简单,实际上-这是一个问题的唯一原因是因为我不知道big-endian,然后一旦我读到它,我就误解了它的实现方式。
1
,这意味着字节顺序从最低有效字节到最高有效字节。因此,将
bigEndian=false
的两个索引相结合需要使用第二个索引,将其位放置在第一位,然后将第一个索引放置在第二个位置(因此,我们现在处于big-endian字节顺序)。我遇到的问题之一是印象,即“字节顺序”决定了位顺序。我以为
buffer
大端将成为
10010101
小端。事实并非如此-每个字节中的位保持原始顺序;区别在于字节是“向后”排序的。因此
10101001
big-endian变为
10110101 111000001
-每个字节中的位顺序相同;但是,字节顺序不同。
11100001 10110101
可能仅将这些位放入字节数组中(不仅在我的代码中,而且在所有使用targetDataLine的Java代码中-
targetDataLine.read()
仅接受参数其中目标var是字节数组),但实际上数据是一个
read()
分成两个
short
。因此,每两个索引必须合并在一起。
byte
/* The Javadoc explains that the targetDataLine will only read to a byte-typed array.
However, because the sample size is 16-bit, it is actually storing 16-bit numbers
there (shorts), auto-parsing them every eight bits. Additionally, because it is storing
them in little-endian, bits [2^0,2^7] are stored in index[i] in normal order (powers 76543210
)
while bits [2^8,2^15] are stored in index[i+1]. So, together they currently read as [7-6-5-4-3-2-1-0 15-14-13-12-11-10-9-8],
which is a problem. In the next for loop, we take care of this and re-organize the bytes by swapping every pair (remember the bits are ok, but the bytes are out of order).
Also, although the array is signed, this will not matter when we combine bytes, because the sign-bit (2^15) will be placed
back at the beginning like it normally is; although 2^7 currently exists as the most significant bit in its byte,
it is not a sign-indicating bit,
because it is really the middle of the short which was split. */
最佳答案
这是将字节流从低字节第一个字节顺序的输入到内部字节顺序的短裤流的组合。
对于符号扩展,更多的是原始字节流的符号编码问题。如果原始字节流是无符号的(编码值从0到255),则克服了Java将值视为有符号的有害影响。因此,有根据的猜测是外部字节strem对无符号字节进行编码。
判断代码是否合理,需要有关正在处理哪种外部编码以及使用哪种内部编码的信息。例如。 (大胆的猜测可能是完全错误的!):读取字节的两个字节垃圾信号属于立体声编码的2个通道,并被放入单个short中,以便于内部处理。您应该查看正在读取的编码以及在应用程序中转换后的数据的使用。
关于java - 将byte []数组的元素组合成16位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36252466/
我有一个 mysql 表,其中包含一些随机数字组合。为简单起见,以下表为例: index|n1|n2|n3 1 1 2 3 2 4 10 32 3 3 10 4 4
我有以下代码: SELECT sdd.sd_doc_classification, sdd.sd_title, sdd.sd_desc, sdr.sd_upl
如果我有两个要合并的数据框 Date RollingSTD 01/06/2012 0.16 01/07/2012 0.18 01/08/2012 0.17 01/09/20
我知道可以使用 lein ring war 创建一个 war 文件,但它似乎仍然包含码头依赖项。当我构建 war (并在 tomcat 上部署)时,有没有办法排除码头依赖项? 如果我根本不能做这件事,
维基百科关于封装的文章指出: “封装还通过防止用户将组件的内部数据设置为无效或不一致的状态来保护组件的完整性” 我在一个论坛上开始讨论封装,在那里我问你是否应该始终在 setter 和/或 gette
对于我使用的组合框内的复选框: AOEDComboAssociationName = new Ext.form.ComboBox({ id: 'AOEDComboAssociationName',
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How do I combine LINQ expressions into one? public boo
如何在 rust 中找到排列或组合的数量? 例如C(10,6) = 210 我在标准库中找不到这个函数,也找不到那里的阶乘运算符(这就足够了)。 最佳答案 以@vallentin 的回答为基础,可以进
我有一个复杂的泛型类型用例,已在下面进行了简化 trait A class AB extends A{ val v = 10 } trait X[T<:A]{ def request: T }
如何使用 Hibernate 限制来实现此目的? (((A='X') and (B in('X',Y))) or ((A='Y') and (B='Z'))) 最佳答案 思考有效 Criteria c
我一定会在我的一个项目中使用谷歌图表。我需要的是,显示一个条形图,并且在条形图中,与每个条形相交的线代表另一个值。如果您查看下面的 jsfiddle,您会发现折线图仅与中间的条形图相交,并继续向其他条
只是一个简单的问题,我也很想得到答案,因为我不能百分百理解 Javascript 示例:假设您提示用户输入名称。够简单吧?但是你有一个数组,上面写着一些名字(其中之一就是),基本上就是我到目前为止所说
我试图通过 Haskell 理解函数式编程,但在处理函数组合时遇到了很多麻烦。 其实我有这两个功能: add:: Integer -> Integer -> Integer add x y = x
我正在寻找一种在 Realm 查询中组合 AND 和 OR 的方法。 这是我的课: class Event extends RealmObject { String id; String
例如,我有一个包含 5 个元素的哈希: my_hash = {a: 'qwe', b: 'zcx', c: 'dss', d: 'ccc', e: 'www' } 我的目标是每次循环哈希时都返回,但没
我是Combine 的新手,我想得到一个看似简单的东西。假设我有一个整数集合,例如: let myCollection = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 我想以例如 0
关于“优先组合而不是继承”的问题,我的老师是这样说的: 组合:现有类成为新类的组件 转发:新类中的每个实例方法,在现有类的包含实例上调用相应的方法并返回结果 包装器:新类封装了现有的 这三个概念我不是
我正在尝试将单个整数从 ASCII 值转换为 0 和 1。相关代码如下所示: int num1 = bin.charAt(0); int num2 = bin.charAt(1);
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 7 年前。 我经常看到“嵌套”类中的非静态变
我尝试合并两个数据集(DataFrame),如下所示: D1 = pd.DataFrame({'Village':['Ampil','Ampil','Ampil','Bachey','Bachey',
我是一名优秀的程序员,十分优秀!