PostgreSQL Datum类型介绍
【摘要】 1、 《C语言》stdint.h 文件中定义了int16_t 、 uint32_t 、 int64_t、uintptr_t等数据类型。 typedef unsigned long int uintptr_t 2、typedef uintptr_t Datum; typedef signed int int32; /* == 32 bits */typed...
1、
《C语言》stdint.h 文件中定义了int16_t 、 uint32_t 、 int64_t、uintptr_t等数据类型。
typedef unsigned long int uintptr_t
2、
typedef uintptr_t Datum;
typedef signed int int32; /* == 32 bits */
typedef unsigned int uint32; /* == 32 bits */
typedef char *Pointer;
#define Int32GetDatum(X) ((Datum) (X))
#define DatumGetInt32(X) ((int32) (X))
#define UInt32GetDatum(X) ((Datum) (X))
#define DatumGetUInt32(X) ((uint32) (X))
#define DatumGetPointer(X) ((Pointer) (X))
#define PointerGetDatum(X) ((Datum) (X))
Datum是PostgreSQL中C语言函数中使用的数据类型之一,它可以表示有效SQL类型中的任何值。Datum就像是void *,不同的就是携带了额外的大小信息。
Datum就是一个8字节的整数,
1)数值类型和Datum互转: 就是整数之间的互转
2)指针类型和Datum互转:就把指针地址和8字节整数值的互转
int32 input = 100;
int32 *pi = &input;
int32 *po;
datum = PointerGetDatum(pi);
po = (int32 *)DatumGetPointer(datum);
(gdb) p *pi
$6 = 100
(gdb) p pi
$4 = (int32 *) 0x7fffffffe49c
(gdb) p datum
$10 = 140737488348316 <---- 0x7fffffffe49c 的10进制值就是 140737488348316
(gdb) p (uintptr_t)pi // 指针地址 转为10进制值
$5 = 140737488348316
(gdb) p *pi // 通过指针地址显示具体的值
$6 = 100
(gdb) p *(int32*)140737488348316 // 10进制值转成int32 *指针地址
$7 = 100
(gdb) p *(int32*)0x7fffffffe49c
$11 = 100
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)