سؤال

أحاول تحويل اللدغة الواردة من 1s و0s من stdin إلى القيم الثنائية الخاصة بها (حيث سيتم تحويل سلسلة مثل "11110111" إلى 0xF7).يبدو هذا تافهًا جدًا ولكني لا أرغب في إعادة اختراع العجلة لذا أتساءل عما إذا كان هناك أي شيء في مكتبة C/C++ القياسية يمكنه بالفعل إجراء مثل هذه العملية؟

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

المحلول

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char * ptr;
    long parsed = strtol("11110111", & ptr, 2);
    printf("%lX\n", parsed);
    return EXIT_SUCCESS;
}

لأعداد أكبر، هناك كما long long إصدار، strtoll.

نصائح أخرى

يمكنك استخدام std::bitset (إذا كان طول البتات الخاصة بك معروفًا في وقت الترجمة)
على الرغم من أنه مع بعض البرامج يمكنك تقسيمها إلى أجزاء ودمجها.

#include <bitset>
#include <iostream>

int main()
{
    std::bitset<5>  x(std::string("01011"));

    std::cout << x << ":" << x.to_ulong() << std::endl;
}

يمكنك استخدام سترتول

char string[] = "1101110100110100100000";
char * end;
long int value = strtol (string,&end,2);

يمكنك استخدام Boost Dynamic Bitset:

boost::dynamic_bitset<>  x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;

لقد كتبت بعض الوظائف لهذا الغرض وتم ترخيصها بموجب LGPL.يمكن ايجاده هنا.

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