- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在将 rospy IMU 驱动程序转换为 roscpp,但很难弄清楚这段代码的作用以及如何转换它。
def ReqConfiguration(self):
"""Ask for the current configuration of the MT device.
Assume the device is in Config state."""
try:
masterID, period, skipfactor, _, _, _, date, time, num, deviceID,\
length, mode, settings =\
struct.unpack('!IHHHHI8s8s32x32xHIHHI8x', config)
except struct.error:
raise MTException("could not parse configuration.")
conf = {'output-mode': mode,
'output-settings': settings,
'length': length,
'period': period,
'skipfactor': skipfactor,
'Master device ID': masterID,
'date': date,
'time': time,
'number of devices': num,
'device ID': deviceID}
return conf
我必须承认,我以前从未使用过 ros 和 python。这不是来自源代码的 1:1 代码,我删除了我认为我知道它们做什么的行,但尤其是 try-block 是我不明白的。我非常感谢帮助,因为我的时间很紧。
如果有人好奇(上下文原因):我必须翻译的文件是 mtdevice.py 、 mtnode.py 和 mtdef.py 并且可以通过谷歌搜索文件名 + 关键字 ROS IMU Driver 找到
非常感谢。
最佳答案
这段代码解压了C结构的字段,即masterID、period、skipfactor、_、_、_、date、time、num、deviceID、length、mode、settings,将它们存储在Python字典中并返回该字典作为调用结果。下划线是未使用的结构部分的占位符。
另请参阅:https://docs.python.org/2/library/struct.html ,例如有关格式字符串 ('!IHHHHI8s8s32x32xHIHHI8x') 的说明,它告诉解包函数结构的外观。
语法a, b, c, d = f()表示函数返回一个东西,在Python中叫做元组。通过将一个元组分配给多个变量,它被拆分成它的字段。
例子:
t = (1, 2, 3, 4)
a, b, c, d = t
# At this point a == 1, b == 2, c == 3, d == 4
用 C++ 替换这段代码应该不会太难,因为 C++ 具有与 C 非常相似的结构。因此 requestConfiguration 的最简单的 C++ 实现就是返回该结构。如果您想更接近 Python 功能,您的函数可以将结构的字段放入 C++ STL 映射并返回它。格式字符串 + 链接指向的文档,告诉您结构中的数据类型以及位置。
请注意,它是 unpack 的第二个参数保存您的数据,第一个参数仅包含有关第二个参数的布局(格式)的信息,如链接中所述。第二个参数在 Python 中看起来像是一个字符串,但它实际上是一个 C 结构。第一个参数告诉 Python 在哪里可以找到该结构中的内容。
因此,如果您阅读有关格式字符串的文档,您可以找出第二个参数(C 结构)的布局。但也许你不需要。这取决于函数的调用者。它可能只需要普通的 C 结构。
根据您添加的评论,我了解到您的函数中的代码比您显示的要多。结构的字段被分配给类的属性。
如果您知道 C 结构(配置)的字段名称,那么您可以将它们直接分配给 C++ 类的属性。
// Pointer 'this' isn't needed but inserted for clarity
this->mode = config.mode;
this->settings = config.settings;
this->length = config.length;
我假设配置结构的字段名称确实是模式、设置、长度等,但您必须验证这一点。可能这个结构的布局是在一些 C 头文件(或文档)中声明的。
关于Python (rospy) 到 C++ (roscpp) struct.unpack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31163199/
dependencies:unpack-dependencies 可以解压哪些存档格式?例如,据我所知,它无法解压 RPM 包。是否有它支持的格式列表?有什么技巧可以让 maven 解压 RPM 包吗
谁能给我解释一下为什么在 test1 上,nums 是 [[0,0],[-1,-1],[0,0],[0,0]] 而不是在测试2上?据我了解,python for xx in xxx 与任何其他语言中的
我想按照建议在 php 中读取一个二进制文件作为字节 [] here我 unpack 'ed fread 的输出。所以我有类似的东西: $file=fopen($filename,'r'); fsee
首先,很抱歉是否已经提出并回答了这个问题,但我认为我的情况与我一直试图找到的其他答案有所不同。另外,我对C++还是很陌生。 我基本上是想创建一个系统,其中C++程序从游戏中接收数据并将其通过套接字发送
克隆 git-repo 后,当我尝试在提交后将 repo 推送到 git 服务器时。它给出的错误是“在远程端解包过程中发生 ssh 错误:解包对象异常退出” 最佳答案 检查远程仓库的所有权。 我也遇到
解决的问题 需要将数组(list)或元组(tuple)中的元素导出到N个变量中。 解决的方案 任何序列都可以通过简单的变量赋值方式将其元素分配到对应的变量中,唯一的要求就是变量的数量和结构需要
Dim rs, ws, fso, conn, stream, connStr, theFolder
我有这个测试函数,它只是打印传递给它的值 function test1(...) for k, v in ipairs(arg) do print(v) end end func
我有以下宏: #define HEX 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 #define BITS 0x01 #define ADD_FLAGS(a, b,
我正在阅读一个套接字,在所有问题都以为我们发送了错误的信息之后,事实证明阅读存在问题。 这个想法是: 1a- Get 4 bytes, unpack (95). 2a- Get 95 next byt
我有一个返回 Sympy 点的函数: result = [Point3D(500, 500, 10), Point3D(-500, 500, 10), Point3D(-500, -500, 10),
我正在尝试存储在 std::tuple 中不同数量的值,稍后将用作调用与存储类型匹配的函数指针的参数。 我创建了一个简化示例来展示我正在努力解决的问题: #include #include voi
我正在使用 ben strasser C++ 快速 csv 解析器:https://github.com/ben-strasser/fast-cpp-csv-parser .它使用可变参数模板将列值传
我有一个由 3 个字符串组成的打包字符串,这样我就有一个整数,指定下一个项目的字节长度,然后是那个项目的字节,然后是下一个项目的字节大小,等等,就好像有人做了: [a.bytesize, a, b.b
我正在尝试存储在 std::tuple 中不同数量的值,稍后将用作调用与存储类型匹配的函数指针的参数。 我创建了一个简化的示例来展示我正在努力解决的问题: #include #include vo
我正在尝试按照 https://conda.github.io/conda-pack/index.html?highlight=conda%20unpack 中的步骤进行操作打包和解包 conda 环
我是R的新手,可以轻松地重新组织数据,并四处寻找解决方案,但找不到我想要做的事情。 Reshape2的融化/浇铸似乎不太奏效,我还没有很好地掌握plyr,因此无法将其纳入其中。 基本上,我有一个dat
希望标题不要误导。 我像往常一样在 Pandas 数据框中加载一个 Excel 文件 df = pd.read_excel('complete.xlsx') 这就是里面的东西(通常已经订购了 - 这是
这个问题在这里已经有了答案: Lua unpack() messing arguments (1 个回答) 6年前关闭。 有人可以向我解释为什么table.unpack()仅当在 table.unpa
我有一个读取二进制文件然后使用 struct.unpack() 解压文件内容的函数。我的功能工作得很好。如果/当我使用长的“格式”字符串解压缩整个文件时,它会更快。问题是有时字节对齐会发生变化,因此我
我是一名优秀的程序员,十分优秀!