2014-09-20 2 views
0

Я пытаюсь сохранить номер в качестве символа в векторе полукокса с именем кодаКастинг int на char. Не хранить правильное значение

code->at(i) = static_cast<char>(distribution(generator)); 

Однако не хранить так, как я думаю, что это должно

Value stored

для некоторых не должно быть '\ x4' значением ascii для 4? если нет, то как я могу достичь этого результата?

Вот еще один вектор, значения которого введены правильно. enter image description here

+2

'' \ x4'' is .. '4'. Довольно уверен, что вы думаете о '' 4'' == '' \ x34'' – WhozCraig

+1

Возможный дубликат [Как преобразовать int в char c] (http://stackoverflow.com/questions/1114741/how-to- convert-int-to-char-c) –

ответ

3

Вы выполняете кастинг без фактического преобразования int в char. Вам нужно:

code->at(i) = distribution(generator) + '0'; 
+0

Спасибо, это сработало. Думал, что я что-то забыл –

+1

В качестве альтернативы, почему бы просто не настроить 'uniform_int_distribution ', чтобы просто перейти на' '0'' через '' 9''. Если целью этого является создание цифр-символов «0» через «9». – WhozCraig

3

No. \xN не дает вам код ASCII для символа N.

\xNявляется ASCII-символ & dagger;, код которого N (in he x adecimal form).

Итак, когда вы пишете '\x4', вы получите [нецензурным] символ с кодом ASCII 4. После преобразования в целое число, это значение по-прежнему 4.

Если вы хотите, символ ASCII, который выглядит как 4 , вы должны написать '\x34', потому что 34 - код ASCII 4. Вы также можете получить там с помощью некоторой магии, основанный на количестве в ASCII, являющиеся смежным и, начиная с '0':

code->at(i) = '0' + distribution(generator); 

& кинжал; Иш.

Смежные вопросы