Преобразование типов “10101”->B10101

163
05 апреля 2019, 19:00

Имеется массив:

byte customChar[8] = {
    B00000,
    B00000,
    B00000,
    B00000,
    B00000,
    B00000,
    B00000,
    B00000
};

В одной из функций я собираю строку вида "10101". Есть ли функция или способ для преобразования этой строки к виду B10101 для добавления как элемент к массиву customChar?

Answer 1

Чтобы преобразовать число, заданное строкой, в конкретное числовое значение можно использовать функции типа std::stoi или std::strtol, где дополнительно нужно указать систему счисления, в текущем случае, это 2. Первая функция требует наличия поддержки стандарта C++11, вторая будет работать и без оного:

#include <cstdlib>
byte value = static_cast<byte>(std::strtol("10001", NULL, 2));

После преобразования можно записать значение в требуемую ячейку массива:

customChar[index] = value;
Answer 2
typedef unsigned char bin_t;
void binToString(bin_t number, char *result)
{
   result[0] = 'B';
   for( bin_t n = sizeof(bin_t); n > 0; --n) {
      result[sizeof(bin_t) - n + 1] = (number & (1 << (n - 1))) ? '1' : '0';
   }
   result[sizeof(bin_t) + 1] = 0;
}
...
char str[sizeof(bin_t)+2];
bin_t number = 0b0101001;
binToString(number, str);
std::cout << str;
READ ALSO
Экспоненциальное число чтение с файла с++

Экспоненциальное число чтение с файла с++

как считать Экспоненициальную запись числа с файла ? ( подробнее желательно ) И в каком виде оно должно быть записано в файле?

184
Сравнение enum и string C++

Сравнение enum и string C++

Собсна, стоит задача: оформить функцию bool parseUrl(const string & url, Protocol & protocol, const unsigned int & port, const string & host, const string & document), которыая будет определять...

130
Разные результаты одинаковых функций

Разные результаты одинаковых функций

Почему следующая программа выводит 1 0, хотя вроде бы одинаковые проверки?

144