2013-12-19 5 views
2

Я узнаю о ASCII и как он кодирует символы. К моему пониманию (хотя я могу ошибаться, потому что я все еще участвую), это то, что ASCII кодирует числа как символы. Например, что-то вроде этого:Преобразование ASCII числового символа в фактический символ

0011 0000 = 30 = '0' (этот являющийся кодированный символ)

0000 0000 = 0 = 0 (в то время как это является фактическое число)

представляет два разных типа кодирования нуля.

Вопрос

Есть ли способ, чтобы отобразить истинный номер для ASCII полукокса типа данных?

Я попытался следующий код:

#include <iostream> 

int main(void) { 

    char e = '0'; 

    std::cout << e << std::endl; 
    std::cout << sizeof(e) << std::endl; 

    std::cin.get(); 
    std::cin.get(); 

return 0; 
} 

Я знаю, что этот код не близко к результату я пытаюсь достичь; однако, это все, о чем я мог думать. Мне нужно лучше понять, как это преобразование может быть выполнено с помощью синтаксиса C++.

Кроме того, пожалуйста, извините меня за любые вводящие в заблуждение информацию или заголовок. Я все еще изучаю «веревки» программирования.

+0

«ASCII кодирует числа как символы» - это наоборот ... ASCII кодирует символы как цифры. (Вы не будете «кодировать» числа в ASCII, потому что в общем случае у вас будет текст мусора с смешанными управляющими символами, который никому не нужен, но мы должны иметь некоторую кодировку для передачи текста внутри компьютеров.) Ты был так близок! –

+1

Все кодировки символов, и многие из них, а не только ASCII, используют числа для представления символов. –

ответ

5

В ролях char к int.

std::cout << static_cast<int>(e); 

char фактически уже является целым числом, то это просто, что перегрузка operator<< принимая char отображает его в качестве символа. Используя значение cast, чтобы изменить тип на int, мы вызываем другую перегрузку вызываемого оператора, который записывается для отображения в виде целого числа.

+0

Отличное объяснение, но делает ли это, чтобы переменная Char «e» стала типом данных int для остальной части программы? – Jake2k13

+3

@ Jake2k13: Нет. Эта операция не влияет на переменную 'e'. Он создает новую, временную, неназванную переменную 'int' с тем же значением. –

2

Что-то вроде этого

#include <iostream> 

int main(void) { 

    char e = '0'; 

    std::cout << e - '\0' << std::endl; 
    std::cout << sizeof(e) << std::endl; 

    std::cin.get(); 
    std::cin.get(); 

    return 0; 
} 

Попробуйте с char e равными любым символом, и он будет печатать фактическое значение символа. Спасибо chris за то, что предложили другой способ сделать это; который путем литья символа int.

std::cout << static_cast<int>(e) << std::endl; 
+0

Я предпочел бы видеть бросок, чем вычитание нулевого tbh. – chris

+0

@chris, не является ли «нуль» в этом случае «нулевым символом»? – Jake2k13

+1

Да, но это менее понятно, чем 'static_cast (e)' на мой взгляд. Если бы короче было всегда лучше, мы бы закончили APL или Perl или что-то во всем мире. – chris

4

Согласно моему пониманию, вы хотите, чтобы фактические значения хранились в памяти, которая равна '0' = 0x30 = 48. В памяти char тип данных также сохраняется как целое, но в 8-битном формате. Из-за этого, если вы наберете переменную с помощью int, вы получите сохраненное значение в целочисленном формате не в атрибуте Ascii.

#include <iostream> 

int main(void) { 

    char e = '0'; 

    std::cout << (int)e << std::endl; 
    std::cout << sizeof(e) << std::endl; 

    std::cin.get(); 
    std::cin.get(); 

return 0; 
} 
+0

+1. Просто в качестве дополнительного объяснения для OP и других читателей 'static_cast (e)' - это новый метод C++ для запроса преобразования, который генерирует ошибку компилятора, если «e» не было разумного типа для этого преобразование, в то время как '(int) e' переносится с языка C, делает то же самое, красиво лаконично, но немного менее безопасно. –

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