1

我需要将十六进制数字数组转换为字符串,以便可以将其作为无符号字符 * 传递给 C 函数(使用 Inline::C),然后可以将其放入字节数组中:

my @hex_vals = (0x06, 0x0D, 0x04, 0x16, 0x19, 0x0);

在 C 端,函数如下所示:

void takeMessage(unsigned char *message)
{
    unsigned char stuff[1088];
    stuff[0] = message[0];
    stuff[1] = message[1];
    ...
}

让 Inline::C 部分工作,只是试图打包字符串。谢谢

4

1 回答 1

4
takeMessage(pack 'C*', @hex_vals)

在 XS 方面,我会使用

void takeMessage(SV* message_sv)
{
    STRLEN len;
    unsigned char* message_buf = (unsigned char*)SvPVbyte(message_sv, len);
    unsigned char stuff[1088];

    if (len > 1088)
        croak("...");

    Copy(message_buf, stuff, len, unsigned char);

    ...
}
于 2013-09-04T21:35:26.173 回答