BSON Hex Görüntüleyici

BSON baytlarını hex olarak görmek için tek alanlı bir JSON nesnesi yapıştırın.

Sonuç

16 00 00 00 02 68 65 6C 6C 6F 00 06 00 00 00 77 6F 72 6C 64 00 00
22 bayt
string (0x02)

Nasıl hesaplanır?

Belge şu düzende kurulur: int32 toplam uzunluk | tür baytı | anahtar (C-metni) | değer | 0x00. Toplam uzunluk küçük-uçlu yazılır; kendisini, öğeyi ve sondaki sonlandırıcı baytı da sayar. Metin değeri 0x02 türünü alır ve int32 uzunluk (metin baytı artı bir), ardından UTF-8 baytları ve bir 00 sonlandırıcı olarak saklanır. Tam sayı değeri 0x10 türünü alır ve dört küçük-uçlu bayt olarak yazılır. Yalnızca tam bir alanı olan JSON nesnesi kabul edilir; değer metin ya da -2147483648 ile 2147483647 arası tam sayı olmalıdır. Başka her durumda sonuç üretilmez. Baytlar büyük harfli, boşlukla ayrılmış hex olarak gösterilir; alan alan açıklama yoktur.

Örnek hesaplama

{"hello":"world"} için: hello anahtarı 5 bayt artı 00 sonlandırıcı (6) tutar. world değeri 5 bayt artı sonlandırıcıdır; uzunluk ön eki 06 00 00 00 olur ve değer kısmı 4 + 6 = 10 bayt tutar. Tür baytı 02 (1 bayt), 4 baytlık toplam uzunluk ve son 00 (1 bayt) eklenince: 4 + 1 + 6 + 10 + 1 = 22. İlk dört bayt bu yüzden 16 00 00 00 olur (hex 16 = 22). Araç toplam uzunluğu 22 bayt olarak, alan türünü string (0x02) olarak bildirir.

Bu örneği dene →

Sık yapılan hatalar

  • İki veya daha fazla alanlı belge, iç içe nesne ya da dizi yapıştırmak. Görüntüleyici tam bir alan kodlar; bunlarda sonuç çıkmaz.
  • Mantıksal değer, 1.5 gibi ondalık, null veya 2147483647 üstü tam sayı kullanmak. Yalnızca metin ve 32 bit tam sayı desteklenir; büyük sayı için int64 (0x12) gerekir ve burada yoktur.
  • Karakter ile baytı karıştırmak. é gibi ASCII dışı bir karakter UTF-8'de iki bayt tutar; uzunluk ön eki ve toplam uzunluk görünen metnin düşündürdüğünden fazla artar.
  • Uzunluk baytlarını büyük-uçlu okumak. BSON tam sayıları küçük-uçlu saklar; 22 sayısı 00 00 00 16 değil, 16 00 00 00 görünür.
  • Metin uzunluk ön ekinin sonlandırıcı sıfır baytını da içerdiğini unutmak; bu yüzden metin uzunluğundan bir fazladır.

Bu hesaplama hakkında

BSON (Binary JSON), MongoDB'nin belgeleri saklamak ve ağ protokolü (wire protocol) üzerinden alışveriş etmek için kullandığı ikili kodlanmış serileştirme biçimidir — JSON'u tarih ve ikili veri gibi ek türlerle genişletir ve bayt akışındaki her öğe aynı düzeni izler: tek baytlık bir tür kodu, null ile sonlanan bir alan adı dizesi ve ardından türüne göre kodlanmış değer (örneğin 32 bit küçük-uçlu bir tam sayı veya bir metin için 4 baytlık uzunluk ön eki ardından UTF-8 baytları).

Bu görüntüleyici, tek alanlı küçük bir JSON nesnesini (değeri bir metin veya 32 bit tam sayı olan) alır ve MongoDB'nin sürücüsünün yapacağı gibi tam olarak kodlar, ardından sonuçtaki baytları onaltılık olarak, belgenin toplam uzunluğu ve alanın türüyle birlikte gösterir — onaltılık çıktının kendisi etiketlenmez, ancak uzunluk ön ekini, tür baytını, alan adını ve değer baytlarını yukarıdaki düzene bakarak okuyabilirsiniz — böylece bir veritabanı sürücüsü çalıştırmadan JSON'un metin gösteriminin BSON'un kompakt ikili düzenine nasıl eşlendiğini görebilirsiniz.

Bu faydalı oldu mu?

En fazla 3 tepki seçebilirsiniz.

Yorumlar (1)

  • Editör ekibi

    Bu görüntüleyici yalnızca tek alanlı bir nesneyi kodlar; gerçek veritabanı belgelerini incelemek için değil, bayt düzenini öğrenmek için kullanın. {"n":5} girdisi 12 baytlık 0C 00 00 00 10 6E 00 05 00 00 00 00 çıktısını verir; buradaki 10 32 bitlik tamsayı türünü, 6E ise n harfini gösterir. İki alanlı girdi sonuç vermez. Sırada hangi BSON türlerinin desteklenmesini isterdiniz?

Popüler hesaplayıcılar

Tüm Hesaplayıcılar