Help with understanding Bson Object arrays

Hello, im trying to understand bson object byte structure, but im struggling with array indexing as it seems to start with 0x30 for index 0 0x31 for index 1 and so on, i dont really understand why that is

Example JSON:

{
    "x": [
        {},
        {}
    ]
}

Converting this to bson (using example .NET driver):

var BsonObj = BsonDocument.Parse("{\"x\": [{}, {}]}")

foreach (byte b in BsonObj.ToBson()) 
    Console.Write(b.ToString("X") + " ");

This will output the bytes: (split areas by bold/not bold, array indexes in <>)

1D 0 0 0 4 78 0 15 0 0 0 3 <30 0> 5 0 0 0 0 3 <31 0> 5 0 0 0 0 0 0

Why do these start at 48 (0x30) and how are array indexes structured? I havent found any information on it…

Thanks for any help

I realize this might be silly due to the fact that 0x30 is character 0 but if theres only two bytes for this that would “only” allow 100 indexes?