gpt4 book ai didi

c++ - 从 C++ 函数返回一个 char 数组到 tcl

转载 作者:行者123 更新时间:2023-11-30 03:56:02 24 4
gpt4 key购买 nike

我看过类似的问题,但是一直无法得到想要的结果。我需要调用一个 c++ 函数并让该函数将一个数组传递给 tcl。我目前的结构是:

    Tcl_Obj *     result = Tcl_NewObj();
unsigned char *buffer = Tcl_SetByteArrayLength(result, 16);
//some other code

//I2C function that fills the buffer
sub_i2c_read(handles[handle], theI2cAddr, 0, 0, (char*)buffer, theNumToRead

//more code
//try to place data in tcl
Tcl_SetObjResult(theInterp, result);

我已经能够看到缓冲区在 c++ 中具有所需的内容,但我试图在 tcl 中将其设置为的变量是空的。

我试着这样调用它:

    set result [sub20 read  $hand "70" 3]

我目前的想法是这样创建 tcl 对象,使用“缓冲区”作为指向字节数组的指针将其转换为字节数组,然后在 tcl 中设置数据,但这显然有缺陷。
对此有任何进一步的澄清,我们将不胜感激。

最佳答案

该 C++ 代码看起来不错。字节应该在缓冲区中就好了,缓冲区应该已经转移到 Tcl 的所有权并存储在变量中就好了。您可以使用 string length $result 仔细检查以查看其中有多少字节; Tcl 将字节数组视为 U+000000 到 U+0000FF 范围内的字符串,因此字符串操作是透明的。

您可能不能做的就是将其打印出来。来自各种协议(protocol)的字节数组通常包含大量空值(U+000000、NUL、\000\x00\u0000 等)而且打印效果不好。相反,要理解内容,请使用 binary 命令来解析字节。例如:

binary scan $result i2d ints dble

这将占用 16 字节缓冲区并从中读取两个小端 32 位整数(将它们存储在 ints 变量中的双元素 Tcl 列表中),然后是一个 IEEE double - 当前平台的 native 表示中的精度 float (将其存储在 dble 变量中)。 i2d 是格式描述符;那里支持许多 格式字符,您必须仔细阅读文档才能准确了解您想要的内容。然而,这些变量之后将保留传统的 Tcl 值(binary scan 的实际结果是格式字符的数量——不包括像 2 这样的修饰符——成功处理,这应该是在这个例子中是两个)。

关于c++ - 从 C++ 函数返回一个 char 数组到 tcl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28700780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com