سؤال

أنا أعمل كثيرًا مع برامج الاتصالات الشبكية والتسلسلية، لذلك غالبًا ما يكون من الضروري بالنسبة لي أن يكون لدي رمز لعرض أو تسجيل عمليات تفريغ سداسية عشرية لحزم البيانات.

في كل مرة أفعل ذلك، أكتب روتينًا تفريغًا سداسيًا آخر من الصفر.أنا على وشك القيام بذلك مرة أخرى، ولكنني فكرت في أن أسأل هنا:هل هناك أي كود تفريغ سداسي عشري مجاني جيد لـ C++ في مكان ما؟

الميزات التي أرغب فيها:

  • N بايت لكل سطر (حيث يكون N قابلاً للتكوين بطريقة ما)
  • تفريغ ASCII/UTF8 اختياري بجانب الرمز السداسي
  • مسافة بادئة قابلة للتكوين، وبادئات لكل سطر، ولاحقات لكل سطر، وما إلى ذلك.
  • الحد الأدنى من التبعيات (من الناحية المثالية، أود أن تكون التعليمات البرمجية كلها في ملف رأس، أو أن تكون مقتطفًا يمكنني لصقه فقط)

يحرر: إيضاح:أنا أبحث عن رمز يمكنني بسهولة إدخاله في برامجي الخاصة للكتابة على stderr أو stdout أو ملفات السجل أو تدفقات الإخراج الأخرى.أنا لا أبحث عن أداة تفريغ سداسية لسطر الأوامر.

هل كانت مفيدة؟

المحلول

أداة يونكس xxd يتم توزيعها كجزء من vim, ، وبحسب http://www.vmunix.com/vim/util.html#xxd, ، مصدر xxd هو ftp://ftp.uni-erlangen.de:21/pub/utilities/etc/xxd-1.10.tar.gz.وقد كتب بلغة C ويبلغ طوله حوالي 721 سطراً.معلومات الترخيص الوحيدة المقدمة لها هي:

* Distribute freely and credit me,
* make money and share with me,
* lose money and don't ask me.

أداة يونكس hexdump متاح من http://gd.tuwien.ac.at/softeng/Aegis/hexdump.html.تمت كتابته بلغة C ويمكن تجميعه من المصدر.إنه أكبر قليلًا من xxd، ويتم توزيعه تحت رخصة GPL.

نصائح أخرى

غالبًا ما أستخدم هذا المقتطف الصغير الذي كتبته منذ وقت طويل.إنها قصيرة وسهلة الإضافة في أي مكان عند تصحيح الأخطاء وما إلى ذلك ...

#include <ctype.h>
#include <stdio.h>

void hexdump(void *ptr, int buflen) {
  unsigned char *buf = (unsigned char*)ptr;
  int i, j;
  for (i=0; i<buflen; i+=16) {
    printf("%06x: ", i);
    for (j=0; j<16; j++) 
      if (i+j < buflen)
        printf("%02x ", buf[i+j]);
      else
        printf("   ");
    printf(" ");
    for (j=0; j<16; j++) 
      if (i+j < buflen)
        printf("%c", isprint(buf[i+j]) ? buf[i+j] : '.');
    printf("\n");
  }
}

فقط في حال وجد شخص ما أنه مفيد ...

لقد وجدت تطبيق وظيفة واحدة لـ ascii/hex dumper في هذه الإجابة.

يمكن العثور على إصدار C++ يعتمد على نفس الإجابة مع ألوان طرفية ANSI هنا.

أكثر خفة الوزن من xxd.

لقد رأيت بي إس باد يستخدم كمحرر سداسي عشري، لكنني عادة أفعل نفس الشيء الذي تفعله.أنا مندهش من عدم وجود "إجابة فورية" لهذا السؤال.إنها حاجة شائعة جدًا.

لقد استخدمت هذا في إحدى أدواتي الداخلية في العمل.

هل يمكن أن تكتب الخاص بك المشرح الخاص ل ويريشارك؟

يحرر:مكتوبة قبل الدقة في السؤال

xxxd هي أداة التفريغ السداسية "القياسية" ويبدو أنها ستحل مشاكلك

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top