0

質問はそれをすべて言います。Postgres の C 言語関数でビット文字列を返すにはどうすればよいですか?

4

1 に答える 1

1

Nick の (非常に役立つ!) コメントを拡張すると、簡単な例と Postgres (Postgres.app 9.4、OS X Yosemite) での結果が返されます。

#include <postgres.h>
#include <utils/array.h>
#include <utils/varbit.h>
#include <fmgr.h>
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
Datum pg_test_varbit(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(pg_test_varbit);
Datum
pg_test_varbit(PG_FUNCTION_ARGS)
{
    VarBit  *result;
    int len, rlen;

    len             = 16;
    rlen            = VARBITTOTALLEN(len);
    result          = palloc0(rlen);
    SET_VARSIZE(result, rlen);
    VARBITLEN(result)
                    = len;

    VARBITS(result)[0] = 0xFF;
    VARBITS(result)[1] = 0x0;

    PG_RETURN_VARBIT_P(result);
}

コンパイル/インストールしたら、Postgres シェルで実行しました。

DROP FUNCTION IF EXISTS pg_test_varbit();
CREATE OR REPLACE FUNCTION pg_test_varbit() RETURNS varbit
  AS 'pgtestvarbit', 'pg_test_varbit'
  LANGUAGE C STRICT;

SELECT pg_test_varbit();

結果として「1111111100000000」を受け取りました。

于 2015-09-15T17:20:03.250 に答える