我正在尝试从C ++操作guid。每当我尝试序列化guid时,都会得到一个空指针。
U g={0};
auto k = ku(g);
auto p = ::b9(2, k);
手册的前两行直接用于创建空GUID。这将导致p == 0。
我实际上试图做的是创建一个guid列表,然后序列化:
k = ktn(UU, 3)
kU(k)[0] = <an instance of U with the g bytes initialized>
kU(k)[1] = <an instance of U with the g bytes initialized>
kU(k)[2] = <an instance of U with the g bytes initialized>
尝试序列化时不起作用。
答案 0 :(得分:2)
我相信您应该使用3
作为b9
的第一个参数。例如:
jmcmurray@homer ~/c $ more test.c
#include"k.h"
K f(K x)
{
K k = ktn(UU,3);I j=0;
for(j=0;j<3;j++){
U g={0};I i=0;
for(i=j;i<j+16;i++){
g.g[i] = (unsigned char)i;
}
kU(k)[0] = g;
}
return b9(3,k);
}
jmcmurray@homer ~/c $ gcc -shared -fPIC -DKXVER=3 test.c -o test.so
jmcmurray@homer ~/c $ q
KDB+ 3.5 2017.11.30 Copyright (C) 1993-2017 Kx Systems
l64/ 8()core 16048MB jmcmurray homer.aquaq.co.uk 192.168.1.57 EXPIRE 2019.06.30 AquaQ #52428
q)f:`:./test 2:(`f;1)
q)f[]
0x010000003e000000020003000000000002030405060708090a0b0c0d0e0f00ae67af727f000..
q)-9!f[]
00000203-0405-0607-0809-0a0b0c0d0e0f 001868af-727f-0000-6062-67af727f0000 a0a..
q)
在这里,我能够从共享对象中返回GUID的序列化列表,并在q端反序列化。在您的示例中尝试使用2
时,在q中运行该函数时出现'type
错误。
根据https://code.kx.com/q/interfaces/capiref/#b9-serialize 3
表示
无数,压缩,允许时间跨度和时间戳序列化
2
相同,没有“ compress”。所以我想您必须压缩GUID?