§

Options

الوضع
تجميع الهكس
بادئة 0x
حالة الحروف
ترميز النص
§

المدخلات

§

النتيجة

تستخدم شبكات SCADA في منشآت أرامكو السعودية بروتوكول Modbus/RTU عبر الاتصالات التسلسلية، وتحمل إطارات الرسائل ترويسات ثنائية مُرمَّزة بالهكس تسبق حمولات ASCII. يلجأ مهندسو التشغيل والصيانة إلى تحليل هذه الإطارات بايتاً بايتاً للكشف عن أكواد الأعطال ومعرِّفات الوحدات في خطوط الإنتاج، إذ تُخفي حقول السجل القيمَ الرقمية والنصية داخل غلاف ثنائي واحد. يُنجز هذا التحويل مباشرةً في المتصفح دون أن تغادر بيانات الشبكة الصناعية الحساسة الجهاز.

كيف يعمل ترميز الهكس

كل حرف في الصفحة مخزَّن على هيئة بايت واحد أو أكثر. يُعيد ترميز الهكس كتابة هذه البايتات بالأساس 16، بمعدَّل حرفين لكل بايت، مما يجعل تدفق البايتات قابلاً للقراءة دون أدوات خاصة.

  1. ترميز النص إلى بايتات. يُمرِّر وضع UTF-8 المدخلات عبر new TextEncoder().encode(text) التي تُعيد Uint8Array من قيم البايتات. أما وضع Latin-1 فيأخذ الثمانية بتات السفلى لكل وحدة رمز عبر charCodeAt(0) & 0xFF، وهي العملية التي تُجريها مشفِّرات ISO-8859-1 القديمة.
  2. تمثيل كل بايت برقمين هكساديسيماليين. يُعيَّن كل بايت إلى رقمين هكساديسيماليين عبر byte.toString(16).padStart(2, "0"). ويتحكَّم مفتاح الحالة في استخدام الحروف الكبيرة (A-F) أو الصغيرة (a-f) في النتيجة.
  3. تطبيق التجميع والبادئة. يُدرج التجميع فاصلاً بين البايتات: مسافة واحدة أو شرطة أو مسافة كل أربعة بايتات. يمكن إضافة بادئة 0x مرة واحدة للسلسلة كاملة (وضع بلا فاصل) أو لكل بايت (وضع المسافة)، بما يتوافق مع اصطلاحات مصفوفات C وأدوات مقارنة الثنائيات.
  4. فك الترميز بالاتجاه العكسي. يجرِّد وضع هكس إلى نص كل مسافة وشرطة وبادئة 0x من المدخلات، ويتحقَّق من الأحرف المتبقية وفق /^[0-9a-fA-F]+$/، ويرفض السلاسل ذات الطول الفردي، ثم يُعيد بناء Uint8Array من أزواج متتالية من البايتات. يُفكِّك وضع UTF-8 المصفوفة باستخدام new TextDecoder("utf-8", { fatal: true })، بينما يُعيِّن وضع Latin-1 كل بايت إلى String.fromCharCode(b).
  5. الوضع الحي للتكرار السريع. الوضع الحي مفعَّل افتراضياً. كل ضغطة مفتاح تُجدوِل إعادة تحويل مؤجَّلة بمقدار 150 مللي ثانية، لتتمكَّن من اللصق والتحرير ومشاهدة النافذة المقابلة تتحدَّث دون الحاجة إلى النقر على زر التحويل.

لماذا تستخدم محوِّل الهكس

  • تنقيح البروتوكولات الثنائية. تحزم تنسيقات الأسلاك كـ Modbus وDNP3 وCoAP ترويساتها في إزاحات بايت محددة. قراءة الإطار الملتقَط كهكس تُظهر كل حقل بوضوح، وقلب البايتات ذاتها إلى ASCII يكشف أي حمولة نصية مخبَّأة داخل الغلاف الثنائي.
  • التعامل مع البرامج الثابتة المدمجة. تُبلِّغ مسابر JTAG وSWD عن محتويات الذاكرة كهكس. ترجمة منطقة من الذاكرة إلى ASCII تكشف السلاسل المضمَّنة كمسارات الملفات ورسائل الخطأ وتوقيعات المورِّدين التي غالباً ما تُحدِّد موقعك في البرنامج الثابت.
  • قراءة التقاطات الحزم. يُشحن كلٌّ من Wireshark وtcpdump بنافذة بايت تطبع كل حزمة كهكس على اليسار وASCII على اليمين. تحويل مقتطف هنا يُتيح لك نسخ كتلة هكس من تقرير خطأ أو سجل دردشة وقراءة ما تقوله البايتات فعلياً دون إعادة استيرادها في أداة التقاط.
  • مقارنات على مستوى البايت. مقارنة ملفين ثنائيين كثيراً ما تعود إلى اكتشاف أي بايتات تغيَّرت. تحويل كلا الجانبين إلى هكس بتجميع متسق يُسوِّي الفروقات في محرر نصي، حيث يمكن لأداة مقارنة مدمجة تمييز البايتات المتغيِّرة.

التطبيقات الشائعة

يظهر تحويل Hex ↔ ASCII عبر الهندسة العكسية والأمن والعمل المدمج كلما كان تدفق البايتات أكثر من مجرد حمولة نصية.

  • الهندسة العكسية: خذ تفريغ هكس من ملف ثنائي مقاوِم للسلاسل، والتقط التشغيلات التي تُفكَّك كـ ASCII قابل للطباعة، واستخدم تلك السلاسل للتثبيت على موقعك في التفكيك.
  • جنائيات الشبكة: انسخ حمولة حزمة واحدة من Wireshark كهكس، والصقها هنا، واقرأ النص على مستوى طبقة التطبيق دون تصدير التقاط كامل.
  • التعامل مع المواد التشفيرية: كثيراً ما يُرسَل المفتاح أو IV أو علامة HMAC كسلسلة هكس. فك ترميزها إلى بايتات يؤكِّد أن الطول يتطابق مع الخوارزمية (16 بايتاً لـ AES-128، و32 لـ AES-256) قبل توصيلها في الإعداد.

مثال عملي

اختر نص إلى هكس، UTF-8، حروف صغيرة، تجميع بمسافة بين كل بايت، البادئة معطَّلة. اكتب Hi: تظهر النتيجة 48 69. فعِّل البادئة وغيِّر التجميع إلى بلا فاصل فتُصبح المدخلات ذاتها 0x4869. الصق الرمز التعبيري 😀 مدخلاً فيُنتج وضع UTF-8 f0 9f 98 80 — أربعة بايتات لنقطة رمز واحدة، وهذا يفسِّر سبب تضخُّم الرموز التعبيرية أحياناً في الإرسال. بدِّل إلى هكس إلى نص والصق 0x48-65-6C 6C 6F: يجرِّد المحلِّل البادئة والشرطات والمسافات ويُعيد بناء Hello.

FAQ

ما هو ترميز الهكس؟

ترميز الهكس (أو الترميز الهكساديسيمال) يكتب تدفق البايتات بالأساس 16، بمعدَّل حرفين ASCII لكل بايت. كل رقم هكساديسيمال يغطِّي أربعة بتات، وبالتالي يغطِّي رقمان بايتاً واحداً من ثمانية بتات. يمتد النظام الأبجدي من 0-9 ثم A-F (أو a-f)؛ والحالة مجرد خيار عرضي وتقبل المفككات كليهما. الهكس هو الطريقة المعتمدة لكتابة البايتات الخام في مواصفات البروتوكول ومخرجات المنقِّح ومفاتيح التشفير، لأنه أكثر إيجازاً بمرتين من الثنائي ويتجنَّب مشاكل الأحرف غير القابلة للطباعة في البايتات الخام في النص.

لماذا يصبح الرمز التعبيري الخاص بي 4 بايتات في الهكس؟

UTF-8 ترميز متغيِّر الطول. تأخذ أحرف ASCII (U+0000 إلى U+007F) بايتاً واحداً، ومكمِّلات Latin-1 بايتين، ومعظم نقاط رموز BMP الأخرى ثلاثة، والأحرف فوق U+FFFF — بما فيها معظم الرموز التعبيرية — أربعة. الوجه المبتسم 😀 هو U+1F600 ويُرمَّز إلى F0 9F 98 80. إن احتجت إلى عرض بايت ثابت العرض، بدِّل إلى Latin-1 — لكن Latin-1 لا يغطِّي سوى أول 256 نقطة رمز، فأي حرف خارج ذلك النطاق لا يمكن إعادة تحويله.

هل يدعم هذا Latin-1 / ISO-8859-1؟

نعم. بدِّل خيار ترميز النص إلى Latin-1 (ISO-8859-1). يأخذ الترميز الثمانية بتات السفلى لكل وحدة رمز JavaScript (charCodeAt(0) & 0xFF)، مما يتوافق مع التعيين أحادي البايت القديم. يستخدم فك الترميز String.fromCharCode(byte) لكل بايت. استخدم Latin-1 عند التعامل مع مخرجات أنظمة Windows-1252 القديمة أو الأنظمة السابقة لـ Unicode حيث يمثِّل كل بايت حرفاً واحداً بالضبط.

هل يتم التحويل داخل متصفحي؟

نعم. يُشغِّل المحوِّل TextEncoder وTextDecoder ومحلِّلاً صغيراً كصفحة ثابتة واحدة. لا رفع، لا استدعاء API، ولا تحليلات لما تلصقه — فقط مقاييس تحميل الصفحة القياسية المشتركة عبر الموقع. بايتات الهكس ذاتها التي تراها هنا هي ما سيُنتجه سكريبت Node أو دالة Lambda على نفس المدخلات.

تحويل Hex ↔ ASCII مهمة صغيرة يؤدِّيها كل من يقرأ بروتوكولات ثنائية أو برامج ثابتة مدمجة عدة مرات في اليوم. إجراؤها في علامة تبويب المتصفح، باستخدام نفس المشفِّرات الأصلية التي تشحن بها Node وV8، يُبقي العمل سريعاً وتدفق البايتات على جهازك.