smalltalk - 在 Visual Works Smalltalk 中从 CPointer 创建 CByteArray
问题描述
一些 C 函数返回aCPointer
到C struct
. C struct
众所周知。现在
我想把C struct
. ByteArray
基本上将结构的内容复制到ByteArray
.
在GemStone/S中,这可以通过以下方式完成:
CByteArray fromCPointer: aCPointer numBytes: 120.
“这将使用 CPointer 引用的结构的内容创建一个 CByteArray(仅复制 120 个字节)”
Visual Works 上有类似的东西吗?我还没有找到它。可以在 Visual Works 级别复制 C 结构,但它只是一个结构,可以在低级别处理它。
解决方案
只有相当丑陋#copyAt:to:size:startingAt:
的东西可以发送给指针。您需要ByteArray
自己分配一个(确保它足够大)。
answer := ByteArray new: size.
pointer
copyAt: 0
to: answer
size: size
startingAt: 1.
另一种方式(ByteArray -> Pointer)将使用#copyAt:from:size:startingAt:
.
此方法适用于ByteArray
和UninterpretedBytes
。如果您想从字节中读取数据,UninterpretedBytes
可能会更有帮助,因为您可以发送诸如从偏移量#longAt:
读取 a之类的东西。long
推荐阅读
- if-statement - 在 SAS 中使用 IF 语句将变量设置为 0 或 1
- regex - 找到一个单词后如何查找所有出现
- powershell - 为什么 PATH 会因您打开 PowerShell 的方式而有所不同?
- javascript - 如何为 React App 自定义 webpack 构建脚本
- mysql - Drupal 无法连接到 macOS Sierra 中的数据库?
- javascript - Bootstrap 4:将按钮组转换为小屏幕的下拉菜单
- c# - CEFSharp jquery 代码不起作用
- android - Android ScrollView 在键盘出现时不滚动,而是使布局更小
- c++ - 对象成员变量还是继承?
- multidimensional-array - 如何通过对 3D 数组中的每个值求和来返回 2D 数组