- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用需要转换的 C 代码片段进行拳击。其中一个功能如下:
+(float) calcTemp:(NSData *)data {
char scratchVal[data.length];
[data getBytes:&scratchVal length:data.length];
UInt16 temp;
temp = (scratchVal[0] & 0xff) | ((scratchVal[1] << 8) & 0xff00);
return (float)temp;
}
我似乎无法理解这一行:
temp = (scratchVal[0] & 0xff) | ((scratchVal[1] << 8) & 0xff00);
我知道这可能是一个新问题(但我是菜鸟^),如果有人可以向我解释这句话,我将不胜感激。特别是带有地址引用和运算符(operator)使用的东西。
在代码片段中,我不明白为什么他们对数据调用 getBytes:length 方法,因为它没有被使用。但主要是,我只是想理解我指出的那句话。
最佳答案
线
temp = (scratchVal[0] & 0xff) | ((scratchVal[1] << 8) & 0xff00);
正在从源自 scratchVal
的两个字节创建一个无符号的 16 位整数值.单&
在此上下文中不是地址运算符而是按位与。所以temp
的低字节从 scratchVal
中包含的第一个字节开始设置, 和 temp
的高字节通过左移 scratchVal
中包含的第二个字节来设置.使用按位或 |
将两个结果数字连接在一起.为避免符号扩展或其他不需要的位,掩码 0xff
和 0xff00
用于确保所有不良品为零。
可视化呈现,如果 scratchVal
包含位 aaaaaaaa bbbbbbbb
在前两个字节中,temp 将以位模式 bbbbbbbbaaaaaaaa
的无符号整数结束。 .
第二个问题问他们为什么调用 -getBytes:length:
.线路
[data getBytes:&scratchVal length:data.length];
从data
读取字节进入scratchVal
临时缓冲区。
回复评论中的问题
why it is needed to left shift the bits to concatenate them
简单的赋值是行不通的。再次假设 scratchVal
是 char
包含位 aaaaaaaa bbbbbbbb
的缓冲区, 代码
temp = scratchVal[0];
将使温度等于UInt16
相当于位 aaaaaaaa
.您不能使用加法,因为结果将是将两个字节加在一起的任何值 ( aaaaaaaa
+ bbbbbbbb
)。
以实数为例,假设scratchVal
的前两个字节等于0x7f 0x7f
.
temp = scratchVal[0] + scratchVal[1];
原来是0x7f + 0x7f
= 0xfe
这不是这段代码的目的。
通过将其分解为多个步骤可以更好地理解使用 OR 构建值(value)。
表达式的第一部分是scratchVal[0] & 0xff
= 0x7f & 0xff
= 0x7f
第二部分是(scratchVal[1] << 8) & 0xff00
= (0x7f << 8) & 0xff
= 0x7f00 & 0xff
= 0x7f00
这种情况下的最终结果是0x7f | 0x7f00
= 0x7f7f
.
关于ios - 代码片段缺乏理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28067525/
我不明白为什么我的 Java 代码没有出现错误。我有一个使用泛型类型的类: import java.util.*; // For ArrayList public class Hat { pub
我正在 Pygame 中开发一款射击类游戏供我自己娱乐,在创建玩家的基本 Action 的过程中我遇到了一些疑问,“Dash”和“Switch”均未按预期工作。 ... def switch(self
当我加载一个显示的网页时,为什么我要为每个图像的 HTTP 请求打开一个新的 TCP 连接?为什么在页面加载期间不重复使用单个 TCP 连接? 最佳答案 我认为浏览器通常会打开多个连接,以便它可以并行
我一直在谷歌搜索,只能找到 a trivial example Compute Capability 3.0 中的新动态并行性在其链接的其中一份技术简报中介绍 from here .我知道 HPC 专
我使用 Telerik 和 Microsoft CDN,分别用于它们各自的 AJAX 工具包。两者在 99% 的情况下都工作得很好。然而,我最近在两家不同的咖啡馆工作并访问了我的网站:第一家咖啡馆不允
我在一家从事网络托管的 IT 公司工作,而且我个人对 SQL 非常缺乏经验*。 *看起来很糟糕 我的一个客户正在尝试将 Epos 系统与其 magento 网站集成,在 Epos 集成过程中,他们遇到
我的代码现在有一个循环,它调用蒙特卡洛函数来计算多个样本的简单积分(y=x,从 0 到 1),并将总时间和积分值写入文本文件。然后循环增加线程数并继续前进。现在大约有 8 个线程,时间峰值约为 2.6
所以 HTTP/2 增加了我想要利用的性能。出于各种原因,我不喜欢连接我的 javascript,而 HTTP/2 无论如何都会使它变得不必要。 但是。我正在开发一个将部署在客户本地网络中的网络应用程
我写了一个非常简单的 Haskell 程序: main = print $ sum $ map read ["55", "99", "101"] 鉴于我过去的经验,我预计会得到一个“歧义类型”错误,因
我是一名优秀的程序员,十分优秀!