فك ترميز قناع البتات
يحوّل مفكك أعلام قناع البتات العدد الصحيح المضغوط إلى أسماء الصلاحيات أو الميزات أو الحالات أو الخيارات التي يمثّلها.
شغّل الأداة مجانًا
أدخلوا القيمة المخزنة وقائمة تربط كل اسم ببت قيمته قوة للعدد اثنين. تحافظ النتيجة على ترتيب التعريفات، وتعيد جميع الأسماء النشطة، وتبيّن أي قيمة متبقية من بتات لم تُعرّف. تفيد هذه الأداة في قراءة حقول قواعد البيانات وحمولات API وقيم البروتوكولات وإعدادات التحكم في الوصول والتهيئات القديمة، من دون تحويل الأعداد يدويًا إلى النظام الثنائي أو الاعتماد على سلوك معاملات خاص بلغة برمجة معينة.
عرّفوا القناع ببتات صريحة ذات أسماء
ابدؤوا بالعدد الصحيح غير السالب في الحقل value، ثم أضيفوا صفًا إلى flags لكل معنى يعرّفه نظامكم. يحتوي كل صف على اسم وبت. يجب أن تكون قيمة البت قوة موجبة للعدد اثنين، مثل 1 و2 و4 و8 و16 وما يليها. تمثّل هذه القيم مواضع ثنائية مستقلة، ولذلك يمكن جمعها بأمان عن طريق الجمع أو عملية OR على مستوى البتات. تُزال المسافات المحيطة بالأسماء، ويجب أن يكون كل اسم فريدًا. كذلك يجب ألا تتكرر قيم البتات، لأن وضع تسميتين للموضع نفسه يجعل النتيجة ملتبسة. يمكن ترتيب التعريفات بأي صورة؛ إذ يحافظ active_flags على ترتيب الإدخال كي يبقى العرض المفضّل في تطبيقكم ثابتًا. تمثّل القيمة صفر قناعًا صالحًا وتعيد مصفوفة active_flags فارغة. تُقبل أعداد JavaScript الصحيحة الدقيقة غير السالبة حتى 9,007,199,254,740,991، وتُقبل البتات المفردة حتى 4,503,599,627,370,496. تؤدي السجلات غير الصالحة إلى خطأ واضح بدل تحويلها ضمنيًا إلى قائمة صلاحيات تبدو معقولة وهي غير صحيحة.
افهموا الأعلام النشطة والبتات المجهولة
يفحص المفكك كل تعريف ليتحقق مما إذا كان موضعه الثنائي موجودًا في value. عندما يكون الموضع موجودًا، يُضاف الاسم المقابل إلى active_flags وتُضاف قيمة البت إلى مجموع القيم النشطة المعرّفة. تتضمن الاستجابة أيضًا unknown_bits، وهي القيمة الناتجة عن طرح كل البتات النشطة المعرّفة من القيمة الأصلية. إذا كانت unknown_bits تساوي صفرًا، فالتعريفات المقدمة تفسّر القناع كاملًا. أما القيمة غير الصفرية فلا تعني وجود خطأ بالضرورة؛ فقد تشير إلى علم جديد أضافه الخادم، أو خيار داخلي حُذف عمدًا، أو اختلاف بين إصدارات المخطط. إظهار الباقي أكثر أمانًا من إسقاط المعلومات. مثلًا، إذا كانت value تساوي 13 وكانت البتات read=1 وwrite=2 وexecute=4 وadmin=8، فالأسماء النشطة هي read وexecute وadmin، وتساوي unknown_bits صفرًا. إذا حُذف البت 8 من التعريفات، تعيد القيمة نفسها read وexecute وتصبح unknown_bits مساوية لـ8. تُعاد القيمة الأصلية بلا تغيير، بحيث تحتفظ السجلات والفحوص اللاحقة بمصدر دقيق للنتيجة.
استخدموا فكًا حتميًا للصلاحيات والخيارات
تشيع أقنعة البتات في أعمدة قواعد البيانات وأوضاع أنظمة التشغيل ومفاتيح الميزات وسجلات الأجهزة وحالات الألعاب واستجابات API الخارجية، لأنها تجمع قيمًا منطقية كثيرة في عدد صحيح واحد. تجعل هذه القدرة تلك الحقول مقروءة عند حدود التكامل. احفظوا تعريفات الأعلام إلى جانب إصدار المخطط، واستدعوا المفكك عند دخول السجل إلى مسار المعالجة، واستخدموا active_flags للعرض أو التصفية أو فحص السياسات. راقبوا unknown_bits بوصفها إشارة إلى التوافق؛ فوجود باقٍ غير صفري يمكن أن يوجّه السجل إلى المراجعة قبل أن يعامل البرنامج صلاحية جديدة كقيمة قديمة عادية. تنفذ الخوارزمية حسابات محدودة على 256 تعريفًا كحد أقصى، ولا تستخدم شبكة أو ساعة أو إعدادات محلية أو عشوائية أو حالة قابلة للتغيير، ولذلك ينتج JSON نفسه دائمًا JSON مطابقًا. كما تتجنب معاملات JavaScript الموقعة ذات 32 بت، فتتعامل بدقة مع أقنعة تتجاوز 32 بت بكثير. يستخدم المتصفح وAPI المكتبة نفسها. التشغيل التفاعلي مجاني، أما مهام API الآلية الناجحة فسعرها $0.002.
حالات الاستخدام
وضّحوا حقول التحكم في الوصول
حوّلوا قناع الصلاحيات المخزن إلى أسماء مقروءة قبل عرضه في لوحة إدارة أو تصديره ضمن سجل تدقيق.
افحصوا خيارات API والبروتوكولات
فكّوا قيم الخيارات المجمعة الواردة من عملية تكامل، واحتفظوا بالبتات غير المعرّفة بوصفها تنبيهًا إلى تغيّر المخطط.
رحّلوا التهيئات القديمة
وسّعوا الإعدادات الرقمية المضغوطة إلى قيم منطقية أو تسميات صريحة أثناء ترحيل قاعدة بيانات أو تطبيق.
الأسئلة الشائعة
ما القيم التي يمكن فكها؟
يمكن فك أي عدد صحيح آمن في JavaScript وغير سالب. يجب أن يكون كل بت معرّف قوة موجبة وفريدة للعدد اثنين.
ماذا تعني unknown_bits؟
إنها الجزء النشط من value الذي لا يقابله أي تعريف مقدم. تعني القيمة صفر أن التعريفات تفسّر القناع كاملًا.
هل يُحفظ ترتيب الأعلام؟
نعم. يتبع active_flags ترتيب التعريفات المقدمة بصرف النظر عن الترتيب العددي لقيم البتات.
هل يمكن أن تتضمن أسماء الأعلام مسافات؟
نعم. تُعامل الأسماء كسلاسل نصية وتُزال المسافات المحيطة بها. تُرفض الأسماء الفارغة أو المكررة بعد هذه المعالجة.
ما تكلفة API؟
تستخدم كل مهمة API ناجحة السعر الأساسي المنشور $0.002. ويمكنكم أيضًا تشغيل المفكك مجانًا في المتصفح.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev/bitmask-flags-decode \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"value":13,"flags":[{"name":"read","bit":1},{"name":"write","bit":2},{"name":"execute","bit":4},{"name":"admin","bit":8}]}'const res = await fetch("https://api.kit.forhosting.com/dev/bitmask-flags-decode", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"value": 13,
"flags": [
{
"name": "read",
"bit": 1
},
{
"name": "write",
"bit": 2
},
{
"name": "execute",
"bit": 4
},
{
"name": "admin",
"bit": 8
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/bitmask-flags-decode",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"value": 13,
"flags": [
{
"name": "read",
"bit": 1
},
{
"name": "write",
"bit": 2
},
{
"name": "execute",
"bit": 4
},
{
"name": "admin",
"bit": 8
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/bitmask-flags-decode", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"value":13,"flags":[{"name":"read","bit":1},{"name":"write","bit":2},{"name":"execute","bit":4},{"name":"admin","bit":8}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"value":13,"flags":[{"name":"read","bit":1},{"name":"write","bit":2},{"name":"execute","bit":4},{"name":"admin","bit":8}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/bitmask-flags-decode", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"value": 13,
"flags": [
{
"name": "read",
"bit": 1
},
{
"name": "write",
"bit": 2
},
{
"name": "execute",
"bit": 4
},
{
"name": "admin",
"bit": 8
}
]
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.bitmask_flags_decode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_flags | 256 |
max_safe_integer | 9007199254740991 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |