Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Можно ли сохранить двузначные числа в беззнаковом символе в С++

Автор вопроса: m0xpl0xОтветов: 3

Для школьного задания мне нужно сохранить строковые значения от 0 до 255 в беззнаковом векторе символов. обычно я бы просто использовал для этого строки или целые числа, но нам специально сказали использовать unisgned char.

Изучив больше о беззнаковых символах, кажется, что он может сохранять код ASCII от 0 до 255 (правильно ли я понял?) Так возможно ли вообще сохранить двузначное (или тройное до 255) число цифр в беззнаковом символе?

Большое спасибо. Мне очень жаль, если это очень просто, но я все еще новичок в С++.

  • unsigned char ch = 123; работает нормально. В чем опять проблема? Igor Tandetnik 19.01.2020
  • unsigned char - целочисленный тип, точно так же, как int и long. Он должен быть достаточно большим, чтобы хранить значения в диапазоне от 0 до 255. Да, он также используется для хранения кодов символов, но не ограничивается ими. Pete Becker 19.01.2020
  • Хорошо, я забыл упомянуть, что значения сохраняются в виде строк. Итак, скажем, у меня есть 'string str = 123', и через sstream я преобразовываю его в беззнаковый символ, например 'stringstream sso; ' --› ' sso ‹‹ ул; ' --› ' unsigned char ch; ' --› ' ссо ›› ч; ' а затем прочитать его с помощью ' std::cout ‹‹ ch ‹‹ endl; ' я просто получаю 1 m0xpl0x 19.01.2020
  • @ m0xpl0x Пожалуйста, не добавляйте подробности в комментарии (особенно такие важные детали), вместо этого отредактируйте свой вопрос, чтобы добавить их . Люди, скорее всего, не заметят эту часть в комментариях) Yksisarvinen 19.01.2020
  • Не могли бы вы уточнить, является ли ваша задача преобразовать переменную типа int a = 123; в unsigned char b[] = {1, 2, 3}; или что-то другое? Bob__ 19.01.2020
  • У меня есть числовые значения, сохраненные в виде строк. например, "string str = 123" и хотите сохранить его как беззнаковый символ, чтобы добавить его в вектор беззнакового символа m0xpl0x 19.01.2020

c++charunsigned

Ответы

Ответ 1 · Robert Lewis

Несмотря на свое название, unsigned char не содержит символов ASCII (или не-ASCII). Он содержит целые значения, хранящиеся в виде последовательности битов. Каждый бит равен 0 или 1. Поскольку в символе 8 бит, у нас есть такие последовательности, как 10010111, 00010110, 00000010 и т. д. Это двоичные числа (или "основание 2"), поскольку мы используем только 2 цифры при их записи. ("0" и "1"). Когда вы говорите "двузначное" или "трехзначное" число в своем вопросе, вы говорите о нашей повседневной системе счисления с основанием 10, в которой для записи чисел используются 10 цифр (от 0 до 9). Вам нужно немного прочитать о числах с основанием 2, чтобы понять это лучше. Но основная вещь заключается в том, что unsigned char содержит целое число от 0 до 255, и не имеет значения, как мы напишем его на нашем повседневном человеческом языке. Причина, по которой они называются символами, заключается в том, что исторически они часто использовались для представления символа текста. В основном целое число, хранящееся в char, использовалось для "поиска" символа в таблице ASCII.

Ответ 2 · Zig Razor

В беззнаковом символе вы можете хранить число от 0 до 255, поэтому ответ на ваш вопрос ДА, вы можете хранить 3-значное число, но обратите внимание, чтобы не переполнить емкость или вы храните только последний BITE (или 8 бит) информации.

Если вы храните в нем символы с их кодом, вам нужно использовать подписанный символ или, лучше, массив подписанных символов, который будет похож на строку.

Ответ 3 · hrithik gautham

Да, вы можете хранить до 255.

Поскольку char состоит из 8 бит (1 байт), это означает, что он может хранить до 256 чисел (28 чисел).

  • Если это signed char, он может хранить от -128 до 127.
  • Если это unsigned char, он может хранить от 0 до 255 (только положительные числа).

Просто помните, если у вас n бит:

  1. Для signed: от -2n-1 до 2n-1-1.
  2. Для unsigned: от 0 до 2n-1.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы