BSON ObjectID Abstraction


#include <bson.h>

typedef struct
   uint8_t bytes[12];
} bson_oid_t;


The bson_oid_t structure contains the 12-byte ObjectId notation defined by the BSON ObjectID specificiation.

ObjectId is a 12-byte BSON type, constructed using:

  • a 4-byte value representing the seconds since the Unix epoch (in Big Endian)

  • a 3-byte machine identifier

  • a 2-byte process id (Big Endian), and

  • a 3-byte counter (Big Endian), starting with a random value.

String Conversion

You can convert an Object ID to a string using bson_oid_to_string() and back with bson_oid_init_from_string().


bson_oid_t's can be used in hashtables using the function bson_oid_hash() and bson_oid_equal().


bson_oid_t's can be compared using bson_oid_compare() for qsort() style comparing and bson_oid_equal() for direct equality.


You can validate that a string containing a hex-encoded ObjectID is valid using the function bson_oid_is_valid().


#include <bson.h>
#include <stdio.h>

int main (int argc, char *argv[])
   bson_oid_t oid;
   char str[25];

   bson_oid_init (&oid, NULL);
   bson_oid_to_string (&oid, str);
   printf ("%s\n", str);

   if (bson_oid_is_valid (str, sizeof str)) {
      bson_oid_init_from_string (&oid, str);

   printf ("The UNIX time was: %u\n",
           (unsigned)bson_oid_get_time_t (&oid));

   return 0;