首页 > 解决方案 > 在 Visual Works Smalltalk 中从 CPointer 创建 CByteArray

问题描述

一些 C 函数返回aCPointerC struct. C struct众所周知。现在
我想把C struct. ByteArray基本上将结构的内容复制到ByteArray.
GemStone/S中,这可以通过以下方式完成:
CByteArray fromCPointer: aCPointer numBytes: 120.
“这将使用 CPointer 引用的结构的内容创建一个 CByteArray(仅复制 120 个字节)”

Visual Works 上有类似的东西吗?我还没有找到它。可以在 Visual Works 级别复制 C 结构,但它只是一个结构,可以在低级别处理它。

标签: smalltalkvisualworks

解决方案


只有相当丑陋#copyAt:to:size:startingAt:的东西可以发送给指针。您需要ByteArray自己分配一个(确保它足够大)。

answer := ByteArray new: size.
pointer
        copyAt: 0
        to: answer
        size: size
        startingAt: 1.

另一种方式(ByteArray -> Pointer)将使用#copyAt:from:size:startingAt:.

此方法适用于ByteArrayUninterpretedBytes。如果您想从字节中读取数据,UninterpretedBytes可能会更有帮助,因为您可以发送诸如从偏移量#longAt:读取 a之类的东西。long


推荐阅读