- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用以下代码,我尝试将三个浮点值转换为单个 NSData 对象,然后我可以通过串行端口传输该对象。
float kP = [[self.kPTextField stringValue] floatValue];
float kI = [[self.kITextField stringValue] floatValue];
float kD = [[self.kDTextField stringValue] floatValue];
float combined[] = {kP, kI, kD};
NSData *dataPackage = [NSData dataWithBytes:&combined length:sizeof(combined)];
[self.serialPort sendData:dataPackage];
问题是它似乎不太好用。每当我使用“sizeof()”C 函数时,它都会告诉我“dataPackage”只有 8 个字节,尽管 3 个浮点值总共应该有 12 个字节。我正在使用 Arduino 接收数据。它看到传入的字节,但它们根本不清晰。我不认为这是 Arduino 方面的问题(但谁知道呢?)。
如有任何帮助,我们将不胜感激!我不是CS专业的,只是生物专业的,我从来没有以正式的方式学过这些东西,所以如果我的问题很荒谬,我很抱歉。我已经花了几个小时在网上搜索有关此问题的信息,但没有找到任何有用的信息。
编辑:事实证明这段代码是完全正确的。我在 arduino 方面犯了一个简单的错误,使用结构而不是联合来获取字节并将它们转换回 float 。
对于可能处于类似困境的其他人,将串口输出的字节转换为 float 的成功方法如下:
(位于实现文件顶部)
union {
float pidVals[3];
byte bytes[12];
} pidUnion;
(内部循环)
if (Serial.available() > 11) {
for (int i = 0; i < 12; i++) {
pidUnion.bytes[i] = Serial.read();
}
}
//Now, you can get access to all three floats of data using pidUnion.pidVals[0], pidUnion.pidVals[1], etc.
这可能不是传输数据的最佳或最可靠的方式。没有纠错机制或数据包结构。但它确实在紧要关头起作用。我想您可能想找到一种方法来创建一个数据包和一个哈希字节,以确保所有数据在另一端都是正确的,但这段代码没有任何这些。
最佳答案
您的代码存在多个问题。
首先,您不想在文本字段上使用 stringValue。您需要文本属性,它是一个字符串。
所以第一行应该是这样的:
float kP = [self.kPTextField.text floatValue];
其次,在C中,数组就是一个指针。
的数据类型float combined[]
和
float *combined
是相同的。两者都是“浮点指针”。
所以这段代码:
NSData *dataPackage = [NSData dataWithBytes:&combined
length: sizeof(combined)];
组合前面不应有 & 符号。它应该是:
NSData *dataPackage = [NSData dataWithBytes:combined
length: sizeof(combined)];
第三,重要的是sizeof(combined)
,而不是sizeof(dataPackage)
。
表达式sizeof(dataPackage)
会告诉你变量dataPackage的大小,它是一个指向NSData对象的指针。您必须在 64 位设备上运行,其中指针为 8 个字节。
要测试 NSData 对象中数据的长度,您需要使用 length 属性来询问它:
NSLog(@"sizeof(combined) = %d", sizeof(combined)";
NSData *dataPackage = [NSData dataWithBytes:&combined
length: sizeof(combined)];
NSLog(@"dataPackage.length = %d", dataPackage.length";
两个日志语句都应显示值 12。
关于ios - 如何将 Float 转换为 NSData 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29000778/
我是一名优秀的程序员,十分优秀!