تحويل سلسلة من 1 و 0 إلى قيمة ثنائية
سؤال
أحاول تحويل اللدغة الواردة من 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.يمكن ايجاده هنا.
لا تنتمي إلى StackOverflow