مفكك LEB128 Varint
يحوّل مفكك LEB128 غير الموقع هذا تسلسل بايتات متغير الطول إلى قيمته الصحيحة الدقيقة.
شغّل الأداة مجانًا
أدخلوا بايتات ست عشرية مثل E5 8E 26، أو اختاروا التدوين العشري عندما يعرض المصدر أرقام البايتات العادية. يتتبع المفكك بت الاستمرار في كل بايت، ويتحقق من انتهاء التسلسل بصورة سليمة، ثم يعيد البايتات بعد توحيد تنسيقها مع النتيجة العشرية. يفيد ذلك عند فحص ملفات WebAssembly الثنائية، وحمولات Protocol Buffers، وبيانات تصحيح DWARF، وغيرها من التنسيقات المضغوطة.
كيفية تخزين العدد الصحيح في LEB128 غير الموقع
يمثل LEB128 الأعداد الصحيحة بالأساس 128 وبترتيب little-endian. يساهم كل بايت بسبعة بتات من البيانات، بينما يُحجز البت الأعلى ليكون علامة استمرار. إذا كانت قيمته واحداً فهذا يعني أن بايتاً آخر ينتمي إلى العدد نفسه، وإذا كانت صفراً ينتهي العدد عند ذلك الموضع. ولأن المجموعة الأقل أهمية تأتي أولاً، تشغل بيانات البايت الأول مواضع البت من صفر إلى ستة، وتشغل بيانات البايت التالي المواضع من سبعة إلى ثلاثة عشر، وهكذا. على سبيل المثال، تعطي E5 8E 26 المجموعات 65 و0E و26 بعد إزالة علامات الاستمرار. يؤدي جمعها بإزاحات متتابعة مقدارها سبعة بتات إلى القيمة 624485. لذلك تحتاج القيم الصغيرة إلى بايتات أقل، بينما تتمدد القيم الكبيرة من دون أصفار بادئة غير ضرورية. تفك هذه الإمكانية الصيغة غير الموقعة فقط؛ فلا تطبق تمديد الإشارة ولا تفسر البت الأعلى من البيانات بوصفه علامة سالبة. وتُعاد النتيجة كسلسلة عشرية للمحافظة على الدقة حتى عند تجاوز مجال الأعداد الصحيحة الآمنة في JavaScript.
إدخال تسلسل البايتات والتحقق منه
ألصقوا عدداً صحيحاً واحداً مكتمل الترميز في حقل النص. في الوضع الست عشري الافتراضي، اكتبوا رموز بايت من خانة أو خانتين وافصلوا بينها بمسافات أو فواصل أو نقطتين أو شرطات؛ فالمدخلان E5 8E 26 و0xE5,0x8E,0x26 متكافئان. تشير البادئة 0x دائماً إلى النظام الست عشري. اختاروا الوضع العشري عندما تعرض أداة الفحص البايتات كأعداد من 0 إلى 255، مثل 229 142 38. يرفض المفكك الرموز غير السليمة، والقيم الخارجة عن مجال البايت، والمدخل الفارغ، والتسلسلات التي تتجاوز الحد المنشور البالغ 128 بايتاً. كما يتحقق من البنية. فكل بايت يكون بته الأعلى مفعلاً يَعِد بوجود بايت تالٍ، ولذلك يكون التسلسل المنتهي بـ80 غير مكتمل. وعندما يظهر بايت ببت أعلى غير مفعل تكون القيمة قد انتهت؛ لذا يُرفض أي رمز لاحق بدلاً من تجاهله أو اعتباره عدداً آخر. تجعل هذه القواعد أخطاء الإدخال ظاهرة، وتمنع الحصول على نتيجة تبدو صحيحة من تسلسل مبتور أو عدة تسلسلات ملتصقة.
استخدام النتيجة عند تصحيح البيانات الثنائية
تتضمن الاستجابة القيمة العشرية الدقيقة، وعدد البايتات المستهلكة، ومصفوفة البايتات التي جرى تحليلها، وتمثيلاً ست عشرياً موحداً بأحرف كبيرة. تسهّل هذه الحقول مقارنة النتيجة بتفريغ ست عشري أو إضافتها إلى حالة اختبار. يستخدم WebAssembly صيغة LEB128 غير الموقعة في كثير من الفهارس والأطوال والمعاملات الصحيحة الفورية. ويستخدمها DWARF للسمات المضغوطة، بينما يستخدم Protocol Buffers ترتيب varint قريباً منها بالأساس 128. في كل حالة، ابدؤوا من البايت الذي يحدده التنسيق المحيط، واجمعوا البايتات حتى أول بايت يكون بت استمراره غير مفعل، ثم فكوا ذلك المقطع وحده. إذا بدت النتيجة غير صحيحة، فتحققوا من موضع البداية ومن كون الحقل غير موقع فعلاً. تحتاج صيغة LEB128 الموقعة وترميز zigzag في Protocol Buffers إلى تفسير إضافي لا ينفذه هذا المفكك عمداً. وللفحوص الآلية، استدعوا العملية الحتمية نفسها عبر API مقابل $0.002؛ فالمدخلات المتطابقة تعطي دائماً مخرجات متطابقة.
حالات الاستخدام
فحص ملف WebAssembly ثنائي
فكوا فهرساً أو طول قسم أو قيمة فورية غير موقعة منسوخة من تفريغ WebAssembly ست عشري.
تصحيح varint في Protocol Buffers
استخرجوا العدد الصحيح الخام غير الموقع الذي يمثله varint بالأساس 128 قبل تطبيق تفسير الحقل.
قراءة بيانات تصحيح DWARF
حوّلوا سمة أو معاملاً من ULEB128 إلى قيمة عشرية دقيقة وتحققوا من بايت النهاية.
الأسئلة الشائعة
ما تكلفة استخدام المفكك؟
تكلفة كل طلب API هي $0.002. أما إصدار المتصفح فيعمل محلياً ويمكن استخدامه مجاناً.
هل يفك قيماً موقعة بصيغة LEB128؟
لا. فهو يفك LEB128 غير الموقع فقط ولا يطبق تمديد الإشارة.
لماذا تُعاد القيمة كسلسلة نصية؟
تحافظ السلسلة العشرية على الأعداد الصحيحة التي تتجاوز المجال العددي الدقيق والآمن في JavaScript.
هل يمكن لصق بايتات تبدأ بالبادئة 0x؟
نعم. تحدد البادئة 0x التدوين الست عشري دائماً لذلك البايت.
لماذا يفشل بايت أخير مثل 80؟
لأن بت الاستمرار فيه مفعل، أي إن الترميز يشير إلى بايت تالٍ لم يتم إدخاله.
هل يكون varint في Protocol Buffers دائماً القيمة النهائية؟
ليس بالضرورة. قد تطبق الحقول الموقعة تفسير zigzag أو المتمم الثنائي بعد فك varint الخام.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev/leb128-decode \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"E5 8E 26"}'const res = await fetch("https://api.kit.forhosting.com/dev/leb128-decode", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "E5 8E 26"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/leb128-decode",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "E5 8E 26"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/leb128-decode", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"E5 8E 26"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"E5 8E 26"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/leb128-decode", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "E5 8E 26"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.leb128_decode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_items | 128 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |