Skip to content

تحويل النظام الست عشري إلى نص (والنص إلى ست عشري)

تحويل Hex إلى نص والنص إلى Hex. الصق Hex بأي شكل — مفصولاً بمسافات، أو 0x، أو \x، أو مخرجات xxd أو hexdump، أو مصفوفات بايتات Java أو C — ليُكتشف ASCII أو UTF-8 أو GBK أو UTF-16 تلقائياً. يعمل في متصفحك.

بدون تتبّع يعمل في المتصفّح مجاني
يجري التحويل بالكامل داخل متصفحك — لا يغادر هذا الجهاز شيء مما تلصقه.
جرّب مثالاً

قُرئ الإدخال بصيغة hex مجرد · 13 بايت

    النص
    Hello, 世界

    الكشف التلقائي: UTF-8، فكل تسلسل متعدد البايتات سليم البنية.

    البايتات نفسها بكل الترميزات

    الترميز القراءة
    UTF-8 يُفكّ ترميزه بسلامة Hello, 世界
    GBK / GB18030 يُفكّ ترميزه بسلامة Hello, 涓栫晫
    UTF-16LE فيه بايتات يتعذّر فك ترميزها 效汬Ɐ隸闧�
    UTF-16BE فيه بايتات يتعذّر فك ترميزها 䡥汬漬⃤뢖�
    ISO-8859-1 يُفكّ ترميزه بسلامة Hello, ä¸<96>ç<95><8C>
    التُقطت تفريغات hex ومصفوفات البايتات ورسائل الخطأ المذكورة هنا من تشغيل فعلي لـxxd وPython 3.14 وNode.js 26 وGo 1.27 وclang، وتُختبر صيغ إخراج المحرّك للتأكد من أنها تُقرأ عائدةً إلى البايتات الأصلية. أما سلوك Java وPHP فمنقول عن التوثيق الرسمي. — فريق هندسة Go Tools · Sep 16, 2026

    كتبه وراجعه مطوّرون يبنون أدوات الترميز في Go Tools. كل قيمة hex وكل ناتج مذكور في هذه الصفحة يُنتجه محرّك الصفحة نفسها وتتحقق منه اختبارات آلية.

    إجابات سريعة عن تحويل hex إلى ASCII

    ما النص المقابل لـ48 65 6C 6C 6F؟

    Hello في ASCII وUTF-8: 48 هو H، و65 هو e، و6C هو l، و6F هو o.

    كم بايتاً يشغل المحرف الصيني الواحد؟

    عادةً 3 بايتات في UTF-8، و2 في GBK فالمحرف 你 هو E4 BD A0 في UTF-8، وC4 E3 في GBK.

    ما هو 0D 0A؟

    CR LF (\r\n) إرجاع العربة متبوعاً بتغذية السطر (\r\n)، وهي نهاية السطر التي تستخدمها Windows وHTTP ومعظم مجموعات الأوامر التسلسلية.

    ما قيمة الحرف A في hex؟

    41 أما الحرف الصغير a فهو 61؛ ويختلف الشكلان الكبير والصغير دائماً بمقدار 20.

    ما هو تحويل النظام الست عشري (hex) إلى نص؟

    النظام الست عشري (hex) طريقة لكتابة البايتات: يُكتب كل بايت، من 0 إلى 255، بخانتين من 00 إلى FF. ويعيد تحويل hex إلى نص هذه البايتات إلى نص مقروء، وهو ينطوي دائماً على اختيار ترميز المحارف — الجدول الذي يحدد أي بايت، أو أي تسلسل بايتات، يمثّل أي محرف.

    في النص الإنجليزي نادراً ما يظهر أثر هذا الاختيار، لأن ASCII وUTF-8 وGBK ومعظم الترميزات الأخرى تتفق على البايتات من 00 إلى 7F. لكنه يظهر فوراً مع أي شيء آخر. فالبايتات C4 E3 BA C3 هي 你好 في GBK وغير صالحة في UTF-8، بينما 你好 في UTF-8 هي E4 BD A0 E5 A5 BD. فقيمة hex لا تحمل إلا نصف المعلومة؛ والترميز هو النصف الآخر.

    أما تحويل النص إلى hex فهو العملية المعاكسة: رمّز النص إلى بايتات، ثم اكتب كل بايت بخانتين ست عشريتين. ويستخدمه المطوّرون لرؤية ما يمر بالضبط عبر خط تسلسلي أو ما يُكتب في عمود قاعدة بيانات، ولإدراج بيانات ثنائية في الكود المصدري، وللمقارنة بين ما أرسله نظامان فعلياً.

    $ echo 48656c6c6f | xxd -r -p
    Hello
    
    >>> bytes.fromhex('c4e3bac3').decode('gbk')
    '你好'
    >>> bytes.fromhex('c4e3bac3').decode('utf-8')
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 0: invalid continuation byte

    ماذا يفعل محوّل hex هذا

    الصق hex بأي شكل

    مفصولاً بمسافات أو متصلاً أو بنقطتين رأسيتين أو بشرطات، وقيم 0x، وتسلسلات هروب \x، وترميز %، ومصفوفات C وGo وJava، ومخرجات Arrays.toString ذات الإشارة في Java، وقيم bytes الحرفية في Python، وكائنات Buffer في Node.js، وشاشات xxd وhexdump -C وod الكاملة. وتخبرك الصفحة بما تعرّفت عليه وما حذفته.

    كشف الترميز مع ذكر السبب

    يفحص الكشف التلقائي وجود علامة ترتيب البايتات، ثم UTF-8 سليم البنية، ثم UTF-16، ثم ASCII خالص، ثم GBK، ويذكر القاعدة التي حسمت الأمر. ولا يُختار GBK إلا إذا قُرئت البايتات محارف صينية شائعة، لذا تُوصَف الإطارات الثنائية القصيرة بأنها على الأرجح ليست نصاً بدلاً من عرضها محارف صينية لا معنى لها.

    كل الترميزات جنباً إلى جنب

    تُعرض البايتات نفسها بترميزات UTF-8 وGBK وUTF-16LE وUTF-16BE وISO-8859-1، مع بيان ما إذا كان فك ترميز كل منها سليماً أم لا. وحين يخرج النص مشوّهاً، تكون القراءة الصحيحة عادةً في الصف التالي.

    إظهار البايتات غير المرئية

    تُعرض NUL وCR وLF وESC وغيرها من بايتات التحكم بالشكل ␀ ␍ ␊ ␛، فيبرز 00 زائد في النهاية أو 0D مفقود في بيانات البروتوكول. ويظل النسخ يعطي المحارف الحقيقية.

    ناتج جاهز للصق في الكود

    يكتب تبويب «نص ← Hex» قيم hex مفصولة بمسافات أو متصلة، وقوائم 0x، وتسلسلات هروب \x، ومصفوفة C بأسلوب xxd -i، وbyte[] في Java بقيم ذات إشارة، وقيمة bytes حرفية في Python مطابقة لناتج repr()، و[]byte في Go، أو تفريغ xxd — وتستطيع الصفحة قراءة كل منها من جديد.

    لا شيء يغادر متصفحك

    يجري التحليل وفك الترميز محلياً بلغة JavaScript. لا يُرفع شيء ولا يُخزَّن ولا يوضع في عنوان URL، لذا يمكنك لصق التقاطات الحزم وسجلات بيئة الإنتاج بأمان.

    تحويل hex إلى نص في الكود

    Python 3

    bytes.fromhex(h).decode()

    تُعيد bytes.fromhex('48 65 6c 6c 6f').decode('utf-8') القيمة 'Hello'؛ والمسافات بين البايتات مسموحة، أما البادئة 0x فلا. والعكس هو s.encode('utf-8').hex()، أو .hex(' ') لناتج مفصول بمسافات. ومرّر 'gbk' لفك ترميز النص الصيني أو ترميزه بـGBK.

    JavaScript (Node.js)

    Buffer.from(h, 'hex')

    Buffer.from(h, 'hex').toString('utf8') تفك الترميز، وBuffer.from(s, 'utf8').toString('hex') ترمّز. الإدخال غير الصالح لا يُعدّ خطأً: يتوقف فك الترميز عند أول زوج سيئ وتُسقط الخانة الفردية الزائدة في النهاية، لذا تحقّق من الإدخال أولاً.

    JavaScript (المتصفح)

    TextDecoder / TextEncoder

    حلّل الأزواج بـparseInt(pair, 16) إلى Uint8Array، ثم استخدم new TextDecoder('utf-8').decode(bytes). يقرأ TextDecoder أيضاً 'gbk' و'big5' و'shift_jis'، لكن TextEncoder لا يُنتج إلا UTF-8.

    Java 17+

    HexFormat.of()

    new String(HexFormat.of().parseHex(h), StandardCharsets.UTF_8) تفك الترميز وHexFormat.of().formatHex(s.getBytes(StandardCharsets.UTF_8)) ترمّز. وفي الإصدارات الأقدم نسّق كل بايت بـString.format("%02x", b)؛ وتجنّب Integer.toHexString(b)، التي تطبع ffffffe4 للبايتات السالبة.

    Go

    encoding/hex

    تُعيد hex.DecodeString(h) البايتات، وتحوّلها string(b) إلى سلسلة نصية؛ وhex.EncodeToString([]byte(s)) تعمل في الاتجاه المعاكس. والحزمة صارمة: المسافات تُعيد invalid byte: U+0020 ' '، والطول الفردي يُعيد odd length hex string.

    C

    sscanf with %2hhx

    مرّ على السلسلة خانتين في كل مرة إلى مخزن مؤقت من نوع unsigned char وأضف محرف الإنهاء '\0'. ولطباعة hex، حوّل النوع إلى unsigned char واستخدم %02X، وإلا فقد تُطبع البايتات الأكبر من 0x7F بالشكل FFFFFFE4 حيث يكون char ذا إشارة.

    PHP

    hex2bin() / bin2hex()

    تُعيد hex2bin('48656c6c6f') القيمة Hello، وتُعيد bin2hex('Hello') القيمة 48656c6c6f. ويوثّق الدليل أن hex2bin() تُعيد false مع E_WARNING عند الإدخال ذي الطول الفردي أو غير الصالح.

    سطر الأوامر (xxd)

    xxd -r -p / xxd -p

    يطبع echo 48656c6c6f | xxd -r -p الكلمة Hello، ويطبع printf 'Hello' | xxd -p القيمة 48656c6c6f. واستخدم printf بدلاً من echo عند الترميز، لأن echo يضيف سطراً جديداً في النهاية، أي 0a.

    C# (.NET 5+)

    Convert.FromHexString()

    Encoding.UTF8.GetString(Convert.FromHexString(h)) تفك الترميز وConvert.ToHexString(Encoding.UTF8.GetBytes(s)) ترمّز (بأحرف كبيرة ومن دون فواصل). وترفض FromHexString المسافات والبادئة 0x. ولا يتضمّن .NET Core ولا .NET 5+ ترميز GBK: استدعِ Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) أولاً، ثم Encoding.GetEncoding(936).

    أمثلة على تحويل hex إلى نص

    بيانات hex بترميز UTF-8 تتضمن محارف صينية

    48 65 6C 6C 6F 2C 20 E4 B8 96 E7 95 8C
    Hello, 世界

    البايتات السبعة الأولى ASCII عادية: 48 65 6C 6C 6F هي Hello، و2C فاصلة، و20 مسافة. أما E4 B8 96 وE7 95 8C فتسلسلان من ثلاثة بايتات في UTF-8 يمثّلان 世 و界 — إذ يشغل معظم المحارف الصينية ثلاثة بايتات في UTF-8. ولأن كل تسلسل سليم البنية، يقرؤه الكشف التلقائي على أنه UTF-8.

    قراءة حسّاس بترميز GBK ليست UTF-8 صالحاً

    CE C2 B6 C8 3A 32 35 2E 33 A1 E6
    温度:25.3℃

    كثير من الأجهزة التسلسلية ترسل النص الصيني بترميز GBK. هنا CE C2 هو 温 وB6 C8 هو 度، و3A 32 35 2E 33 هو :25.3 بترميز ASCII، وA1 E6 هو رمز ℃ كامل العرض — بايتان لكل محرف صيني أو رمز. فإذا قُرئت البايتات على أنها UTF-8 فهي غير صالحة (CE يبدأ تسلسلاً من بايتين، لكن C2 ليس بايت استمرار)، وإذا قُرئت على أنها GBK فهي محارف شائعة، لذا يختار الكشف التلقائي GBK. والمحوّل الذي لا يعرف سوى UTF-8 يعرض هنا محارف استبدال.

    مخرجات xxd ملصوقة كما هي

    00000000: 4869 20e4 bda0 e5a5 bd0d 0a              Hi ........
    Hi 你好␍␊

    هذا بالضبط ما يطبعه printf 'Hi 你好\r\n' | xxd. تُحذف الإزاحة 00000000: وعمود المحارف على اليمين قبل فك الترميز؛ ولو قُرئا على أنهما بيانات، لتحوّلت الأصفار الثمانية وحدها إلى أربعة بايتات NUL في البداية. والبايتان الأخيران، 0d 0a، فاصل أسطر بنمط Windows، ويظهران بالشكل ␍␊.

    مصفوفة بايتات Java من ملف سجل

    [-28, -72, -83, -26, -106, -121]
    中文

    تطبع Arrays.toString(bytes) بايتات Java ذات الإشارة بالنظام العشري. والقيم السالبة هي البايتات من 0x80 فما فوق: -28 تساوي 256 − 28 = 228 = 0xE4. والبايتات الستة E4 B8 AD E6 96 87 هي ترميز UTF-8 للكلمة 中文.

    تحويل نص إلى hex لأمر AT تسلسلي

    AT+CSQ\r\n
    41 54 2B 43 53 51 0D 0A

    تتوقع أجهزة المودم ومعظم مجموعات أوامر UART أن ينتهي كل أمر بإرجاع العربة متبوعاً بتغذية السطر. لكن مربع النص لا يُنتج عند الضغط على Enter سوى 0A، لذا حدّد فواصل الأسطر بصيغة CR LF فتصبح نهاية السطر 0D 0A.

    Hex رُمِّز إلى hex مرتين

    653462646130653561356264
    e4bda0e5a5bd → 你好

    كل بايت هنا خانة ست عشرية بترميز ASCII (65 هو e، و34 هو 4، و62 هو b)، لذا ينتج فك الترميز الأول سلسلة hex أخرى. ويحدث هذا حين تُعامَل سلسلة hex على أنها نص فتُحوَّل مرة ثانية. وتعرض الصفحة جولة ثانية تعطي 你好. ولتجنّب الإنذارات الكاذبة لا تعرضها إلا إذا كانت النتيجة الأولى 12 خانة ست عشرية على الأقل وكان فك الترميز الثاني يعطي نصاً حقيقياً — فالتواريخ والطوابع الزمنية وقيم CRC32 وقيم تجزئة MD5 لا تستدعيها.

    كيف تحوّل hex إلى نص

    1. 1

      الصق hex

      الصقه في مربع الإدخال في تبويب «Hex ← نص» بأي شكل لديك: مفصولاً بمسافات، أو متصلاً، أو قيم 0x، أو تسلسلات هروب \x، أو مصفوفة بايتات، أو شاشة xxd كاملة. ويوضح السطر أسفل المربع كيف قُرئ.

    2. 2

      تحقّق من النص والترميز

      يظهر النص في مربع الناتج، مع الترميز المكتشف تلقائياً وسبب اختياره. فإن كان التخمين خاطئاً، يعرض الجدول أدناه كل القراءات؛ فاختر الصحيحة من قائمة «الترميز».

    3. 3

      ابحث عن المحارف غير المرئية

      تُعرض بايتات التحكم مثل NUL وCR وLF بالشكل ␀ ␍ ␊. ألغِ تحديد «إظهار المحارف غير المرئية» لرؤية النص المجرد، ثم انسخ النتيجة.

    4. 4

      أو حوّل النص إلى hex

      في تبويب «نص ← Hex»، اختر الترميز وصيغة الإخراج — hex مفصول بمسافات، أو قيم 0x، أو مصفوفة C أو Java أو Python أو Go، أو تفريغ xxd. وحدّد CR LF لبروتوكولات المنافذ التسلسلية والشبكات.

    لماذا يفشل تحويل hex إلى نص

    فك ترميز بايتات GBK على أنها UTF-8

    النص الصيني الصادر عن برمجيات Windows القديمة وكثير من الأجهزة التسلسلية وقواعد البيانات القديمة يكون بترميز GBK. وفك ترميزه على أنه UTF-8 إما أن يفشل وإما أن يملأ الناتج بمحارف الاستبدال. انظر إلى جدول الترميزات واستخدم القراءة المفهومة.

    ✗ خطأ
    >>> bytes.fromhex('c4e3bac3').decode('utf-8')
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 0: invalid continuation byte
    ✓ صحيح
    >>> bytes.fromhex('c4e3bac3').decode('gbk')
    '你好'

    استخدام charCodeAt() للحصول على البايتات في JavaScript

    تُعيد charCodeAt() وحدة ترميز UTF-16. وفي ASCII تتطابق مصادفةً مع البايت، لذا لا يظهر الخطأ إلا مع المحارف الأخرى، حيث لا تكون النتيجة ما يرسله أي نظام UTF-8.

    ✗ خطأ
    '你'.charCodeAt(0).toString(16)   // '4f60' — a UTF-16 code unit
    ✓ صحيح
    Buffer.from('你', 'utf8').toString('hex')   // 'e4bda0' — the UTF-8 bytes

    تنسيق البايتات ذات الإشارة بـInteger.toHexString في Java

    النوع byte في Java ذو إشارة، لذا تكون البايتات من 0x80 فما فوق سالبة. وتعمل Integer.toHexString() على قيمة int، فتطبع القيم السالبة بصيغة hex غير ذات إشارة بطول 32 بت، وتُسقط الأصفار البادئة.

    ✗ خطأ
    Integer.toHexString(b)        // "ffffffe4" for 0xE4, "a" for 0x0A
    ✓ صحيح
    String.format("%02x", b)      // "e4", "0a"

    الوثوق بـBuffer.from() في Node.js مع hex غير متحقَّق منه

    لا ترمي Buffer.from(hex, 'hex') أي خطأ أبداً. بل تتوقف عند أول زوج ليس hex صالحاً وتتجاهل خانة فردية زائدة في النهاية، فيعطيك الخطأ المطبعي Buffer أقصر بدلاً من رسالة خطأ.

    ✗ خطأ
    Buffer.from('486', 'hex')      // <Buffer 48> — the 6 is silently dropped
    Buffer.from('48zz65', 'hex')   // <Buffer 48> — stops at zz
    ✓ صحيح
    if (!/^([0-9a-f]{2})*$/i.test(hex)) throw new Error('invalid hex');
    Buffer.from(hex, 'hex');

    لصق تفريغ hex مع عمود الإزاحة

    المحوّل الذي يكتفي بحذف المسافات يقرأ الإزاحة 00000000: على أنها بيانات، ويقرأ عمود المحارف على أنه مزيد من hex حيثما استطاع. فتبدأ النتيجة ببايتات NUL وتنحرف من هناك. استخدم xxd -p للحصول على hex مجرد، أو الصق التفريغ هنا حيث يُتعرَّف على الأعمدة.

    ✗ خطأ
    00000000: 4869 20e4 bda0 e5a5 bd0d 0a              Hi ........
    → read naively: 00 00 00 00 48 69 20 e4 …
    ✓ صحيح
    $ printf 'Hi 你好\r\n' | xxd -p
    486920e4bda0e5a5bd0d0a

    إرسال LF حيث يتوقع الجهاز CR LF

    تُنهي أجهزة مودم AT وكثير من البروتوكولات القائمة على الأسطر كل أمر بإرجاع العربة متبوعاً بتغذية السطر. والأمر الذي ينتهي بـ0A وحده كثيراً ما يُتجاهَل دون أي خطأ على الإطلاق.

    ✗ خطأ
    41 54 2B 43 53 51 0A      AT+CSQ followed by LF only
    ✓ صحيح
    41 54 2B 43 53 51 0D 0A   AT+CSQ followed by CR LF

    متى تحتاج إلى محوّل hex إلى نص

    تصحيح أخطاء المنافذ التسلسلية وUART
    تعرض الطرفيات التسلسلية البيانات المستقبَلة بصيغة hex. الصق إطاراً لقراءة النص بداخله ولملاحظة 0D 0A أو 00 في نهايته — واعمل في الاتجاه المعاكس لبناء أمر بنهايات أسطر CR LF يقبله الجهاز.
    قراءة التقاطات الحزم
    حمولات البروتوكولات المنسوخة من Wireshark أو tcpdump تكون بصيغة hex. وفك ترميز سطر طلب، أو جسم JSON، أو اسم جهاز داخل إطار أسرع هنا من كتابة سكربت، ولا يغادر شيء جهازك.
    مصفوفات البايتات في سجلات التطبيقات
    تسجّل Java مصفوفات البايتات أعداداً عشرية ذات إشارة، وPython قيماً حرفية بالشكل b'...'، وNode.js بالشكل <Buffer ...>. الصق مقطع السجل كما هو لترى النص، بما في ذلك ما إذا كان UTF-8 أو GBK.
    أعمدة hex وقيم BLOB في قواعد البيانات
    تعرض أدوات قواعد البيانات الأعمدة الثنائية بصيغة hex. فُكّ ترميز قيمة لتتحقق مما خُزّن فعلاً، أو حوّل نصاً إلى hex لتقارنه بايتاً ببايت مع ما تحتويه قاعدة البيانات.
    السلاسل النصية في البرامج الثابتة وكود C المصدري
    يحتفظ كود الأنظمة المدمجة بالنصوص في مصفوفات بايتات. حوّل سلسلة نصية إلى مصفوفة C جاهزة للصق، أو اقرأ مصفوفة من ملف ترويسة وأعدها نصاً لتتأكد مما سيطبعه الجهاز.

    كيف يُقابل hex النص: ASCII وUTF-8 وGBK وUTF-16

    خانتان ست عشريتان لكل بايت
    يحمل البايت 8 بتات وتحمل الخانة الست عشرية الواحدة 4، لذا يساوي كل بايت خانتين ست عشريتين بالضبط، من 00 إلى FF، ويكون عدد البايتات دائماً نصف عدد الخانات. والأحرف الكبيرة والصغيرة بالمعنى نفسه. أما الفواصل والبادئات وصياغة المصفوفات فمجرد طريقة كتابة: 4865 و48 65 و0x48, 0x65 و\x48\x65 هي البايتان نفساهما.
    ASCII: البايتات التي تتفق عليها كل الترميزات
    يُخصّص ASCII القيم من 00 إلى 7F. تمتد المحارف القابلة للطباعة من 20 (المسافة) إلى 7E (~)؛ والباقي محارف تحكم، أكثرها ظهوراً في البيانات الحقيقية 00 (NUL) و09 (الجدولة) و0A (تغذية السطر) و0D (إرجاع العربة) و1B (الهروب). وتحافظ UTF-8 وGBK وISO-8859-1 كلها على هذه القيم، ولهذا ينجو النص الإنجليزي العادي من أي ترميز خاطئ تقريباً.
    UTF-8: من بايت إلى أربعة بايتات لكل محرف
    يكتب UTF-8 محارف ASCII بايتاً واحداً لكل منها، وكل محرف آخر تسلسلاً من البايتات. يُعلن البايت الأول الطول — من C2 إلى DF لبايتين، ومن E0 إلى EF لثلاثة، ومن F0 إلى F4 لأربعة — ويجب أن يقع كل بايت يليه بين 80 وBF. وهذه البنية الصارمة هي سبب أن الجملة المكتوبة بـGBK لا تكون UTF-8 صالحاً في شبه كل الحالات — ففي اختبارنا على 33,910 جملة صينية، كانت 55 منها كذلك — وسبب ثقة الكشف التلقائي بفك ترميز UTF-8 السليم. أما المحرف الصيني المنفرد فمختلف: نحو 18% من محارف GBK تُشكّل مصادفةً تسلسل UTF-8 صالحاً من بايتين.
    GBK: بايتان لكل محرف صيني
    يُبقي GBK محارف ASCII بايتاً واحداً، ويرمّز المحارف الصينية وعلامات الترقيم كاملة العرض ببايتين: بايت بادئ من 81 إلى FE يليه بايت لاحق من 40 إلى FE، باستثناء 7F. ولأن نطاق البايت اللاحق واسع جداً، فإن نص UTF-8 القصير إذا قُرئ على أنه GBK كثيراً ما يُفكّ ترميزه دون أي خطأ إلى محارف لا علاقة لها به — فيصبح E4 BD A0 E5 A5 BD (你好) 浣犲ソ — ولهذا تجرّب هذه الصفحة UTF-8 أولاً. ويوسّع GB18030 ترميز GBK بتسلسلات من أربعة بايتات للمحارف الأندر؛ ويقبلها فك الترميز هنا.
    UTF-16 وترتيب البايتات
    يستخدم UTF-16 بايتين لكل محرف (وأربعة للمحارف خارج المستوى متعدد اللغات الأساسي)، ويمكن أن يأتي البايتان بأي من الترتيبين. يضع UTF-16LE البايت الأدنى أولاً — فيكون A هو 41 00 — ويضع UTF-16BE البايت الأعلى أولاً — 00 41. وتستخدم واجهات Windows البرمجية وكثير من الملفات ترتيب little-endian، وقد تبدأ بعلامة ترتيب البايتات FF FE؛ أما ملفات UTF-8 فتبدأ أحياناً بـEF BB BF. ويحذف الكشف التلقائي علامة ترتيب البايتات ويُبلغ عنها.

    التحويل الموثوق بين hex والسلاسل النصية

    حدّد الترميز صراحةً في الطرفين
    قيمة hex وحدها لا تخبر بالترميز الذي أنتجها. فحيثما يتحوّل النص إلى بايتات — getBytes()، أو encode()، أو إعداد طرفية تسلسلية، أو مجموعة محارف اتصال قاعدة البيانات — اضبط الترميز صراحةً ودوّنه بجوار hex، كي لا يضطر الطرف الآخر إلى التخمين.
    اعمل على البايتات لا على رموز المحارف
    الدوال التي تُعيد رموز المحارف، مثل charCodeAt() في JavaScript أو قيم char في Java، تعطي وحدات ترميز UTF-16 لا بايتات مرمّزة. رمّز السلسلة النصية أولاً بـTextEncoder أو Buffer.from() أو getBytes(StandardCharsets.UTF_8)، ثم نسّق البايتات.
    أكمل كل بايت دائماً إلى خانتين
    استخدم %02x أو ما يعادله، ولا تكتفِ أبداً باستدعاء مجرد لتحويل عدد إلى hex. تبدو a و0a متشابهتين في السجل، لكن ضمّ قيم غير مكمّلة يُنتج سلسلة ذات طول فردي، أو ما هو أسوأ: سلسلة يُفكّ ترميزها إلى بايتات مختلفة.
    التزم بفاصل واحد داخل السجل الواحد
    اختر صيغة واحدة للسجلات وآثار التتبع، مثل أزواج مفصولة بمسافات، والتزم بها. فالصيغ المختلطة يسهل على البشر قراءتها ويسهل على السكربتات أن تسيء قراءتها، خصوصاً حين تكون بعض القيم مكمّلة بالأصفار وبعضها غير مكمّل.
    تحقّق من عدد البايتات
    قبل أن تثق بتحويل، قارن عدد البايتات بما تتوقعه: حقل الطول في ترويسة البروتوكول، أو حجم العمود، أو حجم الملف. وتعرض الصفحة العدد في الاتجاهين.

    أسئلة شائعة عن تحويل hex إلى نص

    كيف أحوّل hex إلى نص؟
    الصق hex في مربع الإدخال في تبويب «Hex ← نص»؛ فيظهر النص فوراً. أما يدوياً فيتطلب الأمر خطوتين. أولاً، قسّم hex إلى أزواج: كل زوج من الخانات الست عشرية بايت واحد، من 00 إلى FF، فتكون 48656c6c6f هي البايتات الخمسة 48, 65, 6C, 6C, 6F. ثانياً، فُكّ ترميز هذه البايتات بترميز محارف. ففي ASCII وUTF-8 يمثّل 48 الحرف H، و65 الحرف e، و6C الحرف l، و6F الحرف o، فتنتج Hello. وفي الخطوة الثانية تختلف النتائج: فالبايتات الأكبر من 7F تعني محارف مختلفة في UTF-8 وGBK وغيرهما من الترميزات، ولهذا تكشف هذه الصفحة الترميز وتعرض كل القراءات جنباً إلى جنب.
    لماذا يتحوّل hex لديّ إلى محارف مشوّهة؟
    في الغالب لأن البايتات فُكّ ترميزها بترميز خاطئ. والنص الصيني هو المثال الكلاسيكي: C4 E3 BA C3 هو 你好 في GBK لكنه UTF-8 غير صالح، وE4 BD A0 E5 A5 BD هو 你好 في UTF-8 لكنه يتحوّل إلى 浣犲ソ إذا قُرئ على أنه GBK. انظر إلى جدول الترميزات أسفل النتيجة — فالصف الذي يُقرأ نصاً مفهوماً هو الترميز الذي كُتبت به البيانات. ومع محرف واحد أو محرفين لا يستطيع الكشف التلقائي الحسم دائماً: D2 BB هو UTF-8 صالح (һ) وGBK صالح أيضاً (一)، لذا راجع سطر GBK الذي تعرضه الصفحة أسفل النتيجة. وهناك سببان آخران يستحقان الاستبعاد: خانة ست عشرية زائدة أو ناقصة، تُزيح كل بايت يليها بمقدار نصف بايت، ولصق تفريغ ست عشري ما زال عمود الإزاحة ملتصقاً به. وإذا كان ما بين يديك نصاً مشوّهاً أصلاً (مثل 浣犲ソ) لا hex، فالصق النص في أداة تحويل الترميز بدلاً من ذلك.
    لماذا تظهر البيانات التسلسلية مشوّهة نصاً لكنها صحيحة في hex؟
    إذا كان hex صحيحاً، فمعدل الباود وبتات البيانات وبت التكافؤ مضبوطة كلها — فلو أخطأت في أيٍّ منها لتغيّرت البايتات نفسها. المشكلة إذن في الخطوة التي تحوّل البايتات إلى محارف، وهي عادةً واحد من ثلاثة أمور. فقد لا تكون البيانات نصاً أصلاً: بروتوكول ثنائي مثل Modbus RTU لا يُفهم إلا بصيغة hex. وقد لا يتطابق الترميز: يرسل الجهاز النص الصيني بترميز UTF-8 بينما تعرضه الطرفية التسلسلية بترميز GBK، أو العكس، فتظهر بايتات 你好 في UTF-8، أي E4 BD A0 E5 A5 BD، بالشكل 浣犲ソ. أو قد يحتوي النص على بايتات تحكم مثل 00 أو 0D 0A تظهر مربعاتٍ أو فواصل أسطر. الصق hex هنا: يعرض جدول الترميزات قراءتَي UTF-8 وGBK جنباً إلى جنب، وتظهر بايتات التحكم بالشكل ␀ ␍ ␊.
    ما الفرق بين تحويل hex إلى ASCII وتحويل hex إلى UTF-8؟
    لا يعرّف ASCII سوى البايتات من 00 إلى 7F: الحروف والأرقام وعلامات الترقيم ومحارف التحكم. وقد صُمّم UTF-8 بحيث تعني هذه البايتات نفسها المحارف ذاتها تماماً، ويستخدم تسلسلات من البايتات بدءاً من 80 فما فوق لكل ما عدا ذلك — 2 بايت للحروف اللاتينية ذات العلامات، و3 لمعظم المحارف الصينية واليابانية والكورية، و4 للرموز التعبيرية. لذا يعطي تحويل hex إلى ASCII وتحويله إلى UTF-8 نتائج متطابقة للنص الإنجليزي العادي. ويختلفان بمجرد أن يكون أحد البايتات 80 أو أكبر: فالمحوّل المقتصر على ASCII لا يستطيع عرض هذه البايتات محارفَ، بينما يفك UTF-8 ترميزها إلى نطاق يونيكود الكامل. ولمعرفة ما يمثّله كل بايت من 00 إلى 7F، راجع جدول ASCII.
    كم بايتاً يشغل المحرف الصيني في hex؟
    يعتمد ذلك على الترميز. في UTF-8 يشغل معظم المحارف الصينية 3 بايتات: 你 هو E4 BD A0. وفي GBK وGB2312 تشغل 2 بايت: 你 هو C4 E3. وفي UTF-16 تشغل محارف المستوى متعدد اللغات الأساسي 2 بايت، ويهمّ ترتيب البايتات: 你 هو 60 4F في UTF-16LE و4F 60 في UTF-16BE. أما المحارف النادرة خارج هذا المستوى فتشغل 4 بايتات في UTF-8، و4 في UTF-16 (زوج بديل)، و4 في GB18030. غيّر الترميز في تبويب «نص ← Hex» لترى عدد البايتات لنصك أنت.
    كيف أحوّل hex إلى سلسلة نصية في Python؟
    استخدم bytes.fromhex() ثم فُكّ الترميز: bytes.fromhex('48656c6c6f').decode('utf-8') تُعيد 'Hello'. تقبل fromhex المسافات بين البايتات، فتعمل bytes.fromhex('48 65 6c 6c 6f') أيضاً، لكنها ترفض البادئة 0x وترمي ValueError. ولبيانات GBK فُكّ الترميز بـ'gbk': bytes.fromhex('c4e3bac3').decode('gbk') تُعيد '你好'، بينما يرمي فك ترميز البايتات نفسها بوصفها UTF-8 الخطأ UnicodeDecodeError. والعكس هو '你好'.encode('utf-8').hex()، التي تُعيد 'e4bda0e5a5bd'؛ ومرّر فاصلاً مثل .hex(' ') للحصول على ناتج مفصول بمسافات.
    كيف أحوّل hex إلى سلسلة نصية في JavaScript؟
    في Node.js، تُعيد Buffer.from('48656c6c6f', 'hex').toString('utf8') القيمة 'Hello'. وانتبه للإدخال الخاطئ: لا يرمي Node أي خطأ — بل يتوقف عند أول زوج غير صالح ويُسقط بصمت خانة فردية زائدة في النهاية، فيكون Buffer.from('486', 'hex') مخزناً مؤقتاً من بايت واحد. وفي المتصفح، أنشئ البايتات بنفسك واستخدم TextDecoder، الذي يقرأ GBK أيضاً: new TextDecoder('gbk').decode(Uint8Array.from('c4e3bac3'.match(/../g), h => parseInt(h, 16))) تُعيد '你好'. ولا تستخدم charCodeAt() للحصول على البايتات: '你'.charCodeAt(0).toString(16) تساوي '4f60'، وهي وحدة ترميز UTF-16 وليست بايتات UTF-8 التي هي e4bda0.
    كيف أحوّل سلسلة hex إلى سلسلة نصية في C أو C++؟
    اقرأ خانتين ست عشريتين في كل مرة إلى مخزن مؤقت من نوع unsigned char، ثم أنهِ السلسلة: for (size_t i = 0; i < n; i++) sscanf(hex + 2 * i, "%2hhx", &buf[i]); buf[n] = '\0'; حيث n تساوي strlen(hex) / 2. وعندما تكون hex هي 48656c6c6f2c20e4b896e7958c، تُطبع buf على طرفية UTF-8 بالشكل Hello, 世界. وللاتجاه المعاكس اطبع كل بايت بـprintf("%02X ", (unsigned char)s[i]). والتحويل الصريح للنوع مهم: ففي المنصات التي يكون فيها char ذا إشارة، سيُمدَّد بايت مثل 0xE4 بالإشارة ويُطبع FFFFFFE4 لولا هذا التحويل. وفي C++ ألحِق كل زوج بالسلسلة عبر s.push_back(static_cast<char>(std::stoi(hex.substr(i, 2), nullptr, 16)))؛ ومع قيمة hex نفسها تكون النتيجة Hello, 世界.
    كيف أحوّل hex إلى سلسلة نصية في Java، ولماذا تطبع القيمة ffffffe4؟
    في Java 17 وما بعده يكفي سطر واحد: new String(HexFormat.of().parseHex(hex), StandardCharsets.UTF_8)؛ ولبيانات GBK استخدم Charset.forName("GBK") بدلاً من ذلك. أما في الاتجاه المعاكس فالمفاجأة المعهودة هي ffffffe4، لأن النوع byte في Java ذو إشارة، ولأن Integer.toHexString() تأخذ قيمة من نوع int. يُخزَّن البايت 0xE4 بالقيمة -28؛ وتوسيعه إلى int يُبقي القيمة -28، وtoHexString تطبع الأعداد السالبة بقيمتها غير ذات الإشارة بطول 32 بت، أي ffffffe4. كما تُسقط الدالة نفسها الأصفار البادئة، فيخرج 0x0A بالشكل a. استخدم String.format("%02x", b)، التي تنسّق البايت السالب بقيمته غير ذات الإشارة بطول 8 بتات، أو Integer.toHexString(b & 0xff) مع الإكمال بالأصفار. وفي Java 17 وما بعده، تحوّل HexFormat.of().formatHex(bytes) مصفوفة كاملة، وتعيدها HexFormat.of().parseHex(hex) إلى أصلها.
    ما دالة PHP التي تحوّل hex إلى سلسلة نصية؟
    تفك hex2bin() ترميز سلسلة hex إلى سلسلة ثنائية، وbin2hex() تعمل في الاتجاه المعاكس: bin2hex('Hello') تُعيد 48656c6c6f. ووفقاً لدليل PHP، تُعيد hex2bin() القيمة false وتُطلق E_WARNING حين يكون طول الإدخال فردياً أو لا يكون ست عشرياً صالحاً، لذا احذف المسافات وبادئات 0x قبل استدعائها. سلاسل PHP بايتات، لذا تحمل النتيجة الترميز الذي استخدمه النص الأصلي أياً كان — حوّل ناتج GBK بـmb_convert_encoding() إذا كانت صفحتك بترميز UTF-8.
    هل يمكنني لصق مخرجات xxd أو hexdump مباشرةً؟
    نعم. يُتعرَّف على عمود الإزاحة وعمود المحارف ويُحذفان، ويخبرك السطر أسفل مربع الإدخال بذلك. وهذا مهم لأن المحوّل الذي يكتفي بحذف المسافات يقرأ الإزاحات على أنها بيانات. تتعامل الصفحة مع xxd (بما في ذلك -u و-c و-g)، وhexdump -C، وhex.Dump في Go، وod -A x -t x1، وod -t x1z من GNU، وتوسّع سطر * الذي يطبعه hexdump وod بدلاً من الصفوف المكررة. كما تتعامل مع hexdump المجرد وod -x، اللذين يطبعان كلمات بطول 16 بت بدلاً من البايتات: فعلى جهاز بترتيب little-endian تُطبع البايتات 48 69 بالشكل 6948، لذا تعيد الصفحة كل زوج إلى ترتيبه وتستخدم الإزاحة الأخيرة لحذف بايت الحشو المضاف إلى البيانات ذات الطول الفردي. وقد اختُبر كل شكل من أشكال xxd وhexdump وod على 600 تفريغ حقيقي لبيانات عشوائية.
    ماذا يعني عدد فردي من الخانات الست عشرية؟
    يعني أن شيئاً فُقد أو أُضيف، لأن كل بايت خانتان ست عشريتان بالضبط. ومن الأسباب الشائعة صفر بادئ أسقطته دالة تحويل عدد إلى hex (a بدلاً من 0a)، أو محرف اقتُطع عند النسخ، أو حرف دخيل مثل O مكان 0. وسلسلة hex الناتجة عن تحويل كل البايتات كعدد واحد كبير، مثل hex(int.from_bytes(data, 'big')) في Python، تفقد الصفر في بدايتها: فيخرج \r\n بالشكل 0xd0a. ولا تخمّن الصفحة أي خانة مفقودة، لأن التخمين الخاطئ يُزيح كل بايت بعدها بمقدار نصف بايت وينتج هراءً مقنعاً. بل تعرض إصلاحين بنقرة واحدة — إضافة 0 في البداية، أو حذف الخانة الأخيرة — لتقارن بين النتيجتين. أما القيم المكتوبة كلٌّ على حدة مع بادئة، مثل 0x0 0xa، فلا مشكلة فيها: إذ تُقرأ كل واحدة منها بايتاً كاملاً.
    هل تُرفع البيانات التي ألصقها إلى أي مكان؟
    لا. يجري التحويل بلغة JavaScript داخل متصفحك: لا يُرسل شيء إلى خادم، ولا يُخزَّن، ولا يُضاف إلى عنوان URL للصفحة. ويمكنك التأكد من ذلك في لوحة «الشبكة» (Network) ضمن أدوات المطوّر في متصفحك. وهذا مهم هنا، لأن hex الذي يُلصق في محوّل كثيراً ما يكون التقاطاً لحزم شبكية أو تفريغاً لبرنامج ثابت أو سطراً من سجل بيئة إنتاج.

    أدوات ذات صلة

    عرض جميع الأدوات →

    جدول ASCII ومحوّل الشيفرات

    الترميز والتنسيق

    جدول ASCII الكامل: 128 حرفًا بالأنظمة العشري والست عشري والثماني والثنائي، مع محوّل ثنائي الاتجاه بين النص وشيفرات ASCII. أحرف التحكم مرفقة بتسلسلات الهروب وتدوين ^ وأين تصادفها فعليًا.

    محوّل Base64 — ترميز وفك ترميز أونلاين

    الترميز والتنسيق

    رمّز وفك ترميز Base64 مجاناً أونلاين — محوّل فوري مع دعم UTF-8 والرموز التعبيرية. خصوصية 100% — يعمل في متصفّحك. جرّبه الآن.

    محوّل Base64 إلى صورة أونلاين

    الترميز والتنسيق

    فك ترميز سلسلة Base64 أو عنوان URI للبيانات إلى صورة داخل متصفّحك. عاين واقرأ الأبعاد ونوع MIME ثم نزّل كـ PNG أو JPG أو GIF أو SVG. بلا رفع.

    محوّل CSV إلى JSON

    الترميز والتنسيق

    حوّل CSV إلى JSON في متصفحك. RFC 4180، استنتاج الأنواع، صف العنوان، أمان الأعداد الكبيرة. خصوصية 100%.

    تحويل الترميز وإصلاح النص المشوّه

    الترميز والتنسيق

    الصق نصاً مشوّهاً واسترجع أصله. تُجرَّب كل سلسلة ترميز محتملة — UTF-8 وGBK وBig5 وShift_JIS وEUC-KR وWindows-1252 — وتُرتَّب النتائج مع بيان السلسلة وراء كل واحدة. مجاني ويعمل كلياً داخل متصفحك.

    محوّل .env إلى JSON

    الترميز والتنسيق

    الصق ملف .env واحصل على JSON فورًا. كلمات مرور قاعدة بياناتك ومفاتيح API لا تغادر متصفحك أبدًا — خاص 100٪، بلا رفع، محلّل dotenv مجاني.