DevToys Web Pro iconDevToys Web Proብሎግ
ደረጃ ይስጡን፦
የአሳሽ ቅጥያን ይሞክሩ፦

VarInt ኢንኮደር / ዲኮደር

12 ባይቶች
ሁነታ

የዴሲማል እሴቶች

  • የVarInt ውጤት

  • ቴክኒካዊ ዝርዝሮች

    የVarInt ኢንኮደር / ዲኮደር እንዴት እንደሚሰራ

    መሣሪያው ምን ያደርጋል

    የVarInt መሣሪያው ያልተፈረመ ኢንቲጀሮችን እንደ Protobuf-ዓይነት LEB128 ተለዋዋጭ-ርዝመት ኢንቲጀሮች ይኢንኮድ እና ባይነሪ VarInt ስትሪሞችን ወደ ኢንቲጀር ዝርዝሮች ይመልሳል። እያንዳንዱ እሴት በመጠኑ መሠረት በ1–10 ባይቶች ይኢንኮዳል፣ እና የእያንዳንዱ ባይት ከፍተኛው ቢት ተጨማሪ ባይቶች እንደሚከተሉ የሚያመለክት ምልክት ነው። ውጤቱ ለሙከራዎች እና ፊክስቸሮች በቀላሉ ለማካተት እንደ ባይት አሬይ፣ ሄክሳዴሲማል ወይም Base64 ይታያል።

    የተለመዱ የገንቢ አጠቃቀም ሁኔታዎች

    Protobuf የዋየር-ፎርማት ፔይሎዶችን የሚዲባግ ኢንጂነሮች ሙሉ Protobuf runtime ሳያስነሱ የመስክ ታጎችን እና ያልተፈረመ የኢንቲጀር መስክ እሴቶችን ለመመርመር VarInt ኢንኮድ/ዲኮድ ይጠቀማሉ። Bitcoin እና ሌሎች የክሪፕቶከረንሲ አበልጻጊዎች VarInt-የተኢንኮዱ የስክሪፕት ርዝመቶችን እና የትራንዛክሽን ቆጠራዎችን ይተነትናሉ። መሣሪያው በትንሽ ቁጥሮች ላይ በተጠቃሚ መጠን ምክንያት LEB128 የሚያወስዱ ብጁ ባይነሪ ፕሮቶኮሎችን ሲመለሱ ለመረዳት (reverse-engineering) ደግሞ ጠቃሚ ነው።

    የውሂብ ቅርጾች፣ አይነቶች ወይም ልዩነቶች

    LEB128 (Little-Endian Base 128) በእያንዳንዱ ባይት 7 የፔይሎድ ቢቶችን ያወጣል፣ እና ከፍተኛው ቢት እንደ ቀጣይነት ምልክት ይሰራል። ትንሽ ቁጥሮች (0–127) አንድ ባይት ይጠቀማሉ፤ እስከ 16,383 ድረስ ያሉ ቁጥሮች ሁለት ባይቶች ይጠቀማሉ፤ እና እንዲሁ ቀጥሎ ይሄዳል። ግብዓቶች በክፍተት፣ በኮማ ወይም በአዲስ መስመር የተለዩ የዲሲማል ቁጥሮችን ይቀበላሉ። ውጤቶች በሄክሳዴሲማል፣ Base64 እና በጥሬ ባይት አሬይ ኖቴሽን ይገኛሉ። የተፈረመ ኢንቲጀሮች መጀመሪያ ZigZag ለውጥ (n << 1) ^ (n >> 31) በመተግበር ሊኢንኮዱ ይችላሉ።

    የተለመዱ ስህተቶች እና የጠርዝ ሁኔታዎች

    የJavaScript ቁጥር ትክክለኛነት እስከ 2^53 − 1 ድረስ ነው፤ Number.MAX_SAFE_INTEGER በላይ ያሉ እሴቶች በደህና ሊኢንኮዱ አይችሉም። የተቆረጡ VarInt ስትሪሞች (መጨረሻ ባይት የጎደለ) በከፊል ይዲኮዳሉ እና ኦፍሴቱን የሚያመለክት ስህተት ይመልሳሉ። አሉታዊ ቁጥሮች በቀጥታ ሊኢንኮዱ አይችሉም — መጀመሪያ ZigZag ኢንኮዲንግ ይጠቀሙ። Base64 ፓዲንግ ሊወገድ ስለሚችል ከስክሪንሾቶች የVarInt ባይቶችን መቅዳትን ያስወግዱ፤ የጎደለ ፓዲንግ የባይት ድንበሮችን ይቀይራል።

    ይህን መሣሪያ ከኮድ ጋር መቼ መጠቀም እንደሚገባ

    በዲባግ ወቅት ወይም ሙከራዎችን ሲጽፉ የProtobuf ዋየር ባይቶችን በፍጥነት ለመመርመር የአሳሽ መሣሪያውን ይጠቀሙ። ለምርት ኢንኮዲንግ የቋንቋ-ተወላጅ VarInt ላይብረሪዎችን (`varint` በnpm ላይ፣ `binary.varint` በGo የencoding/binary ውስጥ፣ `decode_varint` በPython የgoogle.protobuf.internal ውስጥ) ይጠቀሙ፤ እነዚህ ስትሪሚንግ፣ የስህተት መመለሻ (error recovery) እና ZigZag ለውጥን በአንድ ጥሪ ውስጥ ያስተናግዳሉ።