VarInt എൻകോഡർ / ഡീകോഡർ
ഡെസിമൽ മൂല്യങ്ങൾ
VarInt ഔട്ട്പുട്ട്
സാങ്കേതിക വിശദാംശങ്ങൾ
VarInt എൻകോഡർ / ഡീകോഡർ എങ്ങനെ പ്രവർത്തിക്കുന്നു
ഉപകരണം ചെയ്യുന്നത് എന്താണ്
VarInt ടൂൾ unsigned integer-കളെ Protobuf-സ്റ്റൈൽ LEB128 variable-length integer-കളായി എൻകോഡ് ചെയ്യുകയും ബൈനറി VarInt സ്ട്രീമുകൾ വീണ്ടും integer ലിസ്റ്റുകളായി ഡീകോഡ് ചെയ്യുകയും ചെയ്യുന്നു. ഓരോ മൂല്യവും അതിന്റെ വലിപ്പം അനുസരിച്ച് 1–10 ബൈറ്റുകളിൽ എൻകോഡ് ചെയ്യപ്പെടുന്നു; ഓരോ ബൈറ്റിലെയും high bit കൂടുതൽ ബൈറ്റുകൾ തുടരുമോ എന്ന് സൂചിപ്പിക്കുന്നു. ഔട്ട്പുട്ട് ബൈറ്റ് അറേ, ഹെക്സാഡെസിമൽ, അല്ലെങ്കിൽ Base64 ആയി കാണിക്കുന്നു; ടെസ്റ്റുകളിലും ഫിക്ചറുകളിലും എളുപ്പത്തിൽ എംബെഡ് ചെയ്യാൻ ഇത് സഹായിക്കുന്നു.
ഡെവലപ്പർമാർക്കുള്ള സാധാരണ ഉപയോഗ സാഹചര്യങ്ങൾ
Protobuf wire-format payload-ുകൾ ഡീബഗ് ചെയ്യുന്ന എഞ്ചിനീയർമാർ പൂർണ്ണ Protobuf runtime സ്പിൻ അപ്പ് ചെയ്യാതെ തന്നെ ഫീൽഡ് ടാഗുകളും unsigned integer ഫീൽഡ് മൂല്യങ്ങളും പരിശോധിക്കാൻ VarInt encode/decode ഉപയോഗിക്കുന്നു. Bitcoin ഉൾപ്പെടെയുള്ള ക്രിപ്റ്റോകറൻസി ഡെവലപ്പർമാർ VarInt-എൻകോഡ് ചെയ്ത സ്ക്രിപ്റ്റ് നീളങ്ങളും ട്രാൻസാക്ഷൻ കൌണ്ടുകളും പാഴ്സ് ചെയ്യുന്നു. ചെറിയ സംഖ്യകൾക്ക് കോംപാക്റ്റായതിനാൽ LEB128 സ്വീകരിക്കുന്ന കസ്റ്റം ബൈനറി പ്രോട്ടോകോളുകൾ reverse-engineer ചെയ്യുമ്പോഴും ഈ ടൂൾ ഉപകാരപ്പെടുന്നു.
ഡാറ്റ ഫോർമാറ്റുകൾ, തരങ്ങൾ, അല്ലെങ്കിൽ വകഭേദങ്ങൾ
LEB128 (Little-Endian Base 128) ഓരോ ബൈറ്റിലും 7 payload ബിറ്റുകൾ പുറപ്പെടുവിക്കുന്നു; ഏറ്റവും പ്രധാനപ്പെട്ട ബിറ്റ് continuation flag ആയി പ്രവർത്തിക്കുന്നു. ചെറിയ സംഖ്യകൾ (0–127) ഒരു ബൈറ്റ് ഉപയോഗിക്കുന്നു; 16,383 വരെ ഉള്ള സംഖ്യകൾ രണ്ട് ബൈറ്റുകൾ ഉപയോഗിക്കുന്നു; ഇങ്ങനെ തുടരും. ഇൻപുട്ടുകൾ whitespace, കോമ, അല്ലെങ്കിൽ newline ഉപയോഗിച്ച് വേർതിരിച്ച ഡെസിമൽ സംഖ്യകൾ സ്വീകരിക്കുന്നു. ഔട്ട്പുട്ടുകൾ ഹെക്സാഡെസിമൽ, Base64, കൂടാതെ raw byte array notation എന്നിവയിൽ ലഭ്യമാണ്. Signed integer-കൾ എൻകോഡ് ചെയ്യാൻ ആദ്യം ZigZag transformation (n << 1) ^ (n >> 31) പ്രയോഗിക്കാം.
സാധാരണ പിഴവുകളും എഡ്ജ് കേസുകളും
JavaScript സംഖ്യാ precision 2^53 − 1 വരെ മാത്രമാണ്; Number.MAX_SAFE_INTEGER-നെക്കാൾ വലിയ മൂല്യങ്ങൾ സുരക്ഷിതമായി എൻകോഡ് ചെയ്യാൻ കഴിയില്ല. Truncated VarInt സ്ട്രീമുകൾ (terminator byte ഇല്ലാത്തത്) ഭാഗികമായി ഡീകോഡ് ചെയ്ത് offset സൂചിപ്പിക്കുന്ന ഒരു പിശക് തിരികെ നൽകും. നെഗറ്റീവ് സംഖ്യകൾ നേരിട്ട് എൻകോഡ് ചെയ്യാൻ കഴിയില്ല — ആദ്യം ZigZag encoding ഉപയോഗിക്കുക. Base64 padding നീക്കം ചെയ്തിരിക്കാവുന്ന സ്ക്രീൻഷോട്ടുകളിൽ നിന്ന് VarInt ബൈറ്റുകൾ കോപ്പി ചെയ്യുന്നത് ഒഴിവാക്കുക; padding ഇല്ലാതാകുന്നത് byte boundary-കൾ മാറ്റും.
കോഡിനേക്കാൾ ഈ ഉപകരണം എപ്പോൾ ഉപയോഗിക്കണം
ഡീബഗ്ഗിംഗ് സമയത്തോ ടെസ്റ്റുകൾ എഴുതുമ്പോഴോ Protobuf wire bytes വേഗത്തിൽ പരിശോധിക്കാൻ ബ്രൗസർ ടൂൾ ഉപയോഗിക്കുക. പ്രൊഡക്ഷൻ എൻകോഡിംഗിന് ഭാഷാ-നേറ്റീവ് VarInt ലൈബ്രറികൾ (`varint` on npm, `binary.varint` in Go's encoding/binary, `decode_varint` in Python's google.protobuf.internal) ഉപയോഗിക്കുക; ഇവ streaming, error recovery, കൂടാതെ ZigZag transformation എന്നിവയെ ഒറ്റ കോളിൽ കൈകാര്യം ചെയ്യുന്നു.