ドキュメントによると:
For most queries, the value returned by PQgetvalue is a null-terminated ASCII
string representation of the attribute value. But if PQbinaryTuples() is TRUE,
the value returned by PQgetvalue is the binary representation of the type
in the internal format of the backend server
PQbinaryTuples
そこは本当だと思います。
PQGetvalue()
char *
ドキュメントに従ってa を返します。これを符号なし32 ビット整数へのポインタに変換し、その前にこれを逆参照し(uint32_t *)
て実際の値 (符号なしの 32 ビット整数) を取得し、最後にそれをプラットフォームのネイティブ 32 ビット整数に変換します。これはおそらく次のことを意味します。元の保存形式はネットワーク順です。char *
*
ntohl
そのコードを「分割」すると、次のようになります。
// Get value from database as a char *
char *in_database = PQgetvalue(result, i, 0);
// Convert the pointer to char to a pointer to an unsigned, 32bit integer
uint32_t *ptr = (uint32_t *) in_database;
// Dereference that pointer to obtain the actually stored value
uint32_t stored_value = *ptr;
// Turn that value to a native integer for the CPU
uint32_t ip = ntohl(stored_value);