1 sn ve 0 sn'lik bir gelen stdinini stdin'den ilgili ikili değerlere dönüştürmeye çalışıyorum ("11110111" gibi bir dize 0xF7'ye dönüştürülecektir). Bu oldukça önemsiz gibi gözüküyor ama ben tekerleği yeniden icat etmek istemiyorum, bu yüzden C/C++ standart lib'lerinde böyle bir işlemi gerçekleştirebilecek bir şey olup olmadığını merak ediyorum.1s ve 0s dizesini ikili değere dönüştürme
cevap
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char * ptr;
long parsed = strtol("11110111", & ptr, 2);
printf("%lX\n", parsed);
return EXIT_SUCCESS;
}
kullanabilirsiniz.
Bu doğru görünüyor. Tek endişem şu anda bunu düşünen çok geniş dizelerdi, muhtemelen bazı özel kodlara ihtiyaç duyacaktı. – grosauro
Strtol yanında "uzun uzun" tamsayılar için de gezinti (iki L) vardır. – jkramer
Ah, şimdi senin noktanı görüyorum. Sonuç uzunluğu, uzun veya uzun uzun tamsayıya sığdığı sürece dize uzunluğu sorun olmamalıdır. – jkramer
Bir long long
sürümü, strtoll
olarak orada daha büyük numaraları için strtol
char string[] = "1101110100110100100000";
char * end;
long int value = strtol (string,&end,2);
std :: bitset'i kullanabilirsiniz (eğer bitlerin uzunluğu derleme zamanında biliniyorsa)
Bazı programlarda parçalara ayırıp birleştirebilirsiniz.
#include <bitset>
#include <iostream>
int main()
{
std::bitset<5> x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
}
Dinamik bitset Boost kullanabilirsiniz:
boost::dynamic_bitset<> x(std::string("01011"));
std::cout << x << ":" << x.to_ulong() << std::endl;
Ödev yok. Bir dizi hata ayıklama aracına daha kolay okumak için bir dönüştürücü yerleştirmeye çalışıyorum ama tüm girdimiz dize biçiminde geliyor. – grosauro