2013-08-20 8 views
1

У меня есть массив символов, но значения - это десятичное представление символа. пример:Как преобразовать десятичное значение в символ на языке c

char bytes[4]={50,48,49,51} 

как преобразовать это, чтобы получить массив символов, как это:

char bytes1[4]={2,0,1,3} 
+2

Вычтите 48 :-) –

ответ

0

Входной массив для этого вопроса является:

char bytes[4]={50,48,49,51} 

В памяти, символы сохраняются в соответствующих ASCII значений (или какой-либо другой схемы кодировки символов, выбранный компилятором): http://en.wikipedia.org/wiki/ASCII

Для данного входа, ASCII Value - Char Mapping выглядит следующим образом:

ASCII Value || Character 
48   ||  '0' 
49   ||  '1' 
50   ||  '2' 
51   ||  '3' 

Примечание:

A. Для преобразования заданного символа значение к соответствующему целочисленное значение:

Subtract '0'. 

Example: '2' - '0' = (int) 2 

B. Для преобразования заданного целочисленного значения соответствующего символа:

Add '0'. 

Example: 2 + '0' = 50 {ASCII Value for '2'} 

Распечатайте значения символов для данного входного массива:

int main() 
{ 
    char bytes[4]={50,48,49,51}; 
    int i=0; 

    /* Print The Equivalent Character Values */ 
    for (i=0; i<4; i++) 
    { 
     printf ("%c\t", bytes[i]); 
    } 

    return 0; 
} 

Выход:

2  0  1  3 
+1

Это тоже будет 'bytes1 = {50,48,49,51}', вы просто печатаете его как символ. – DrYap

+0

Не как символы, вы получите их как ints. GDB Выход: (GDB) р bytes1 [0] $ 2 = 50 '2' (GDB) р bytes1 [1] $ 3 = 48 '0' (GDB) р bytes1 [2] $ 4 = 49 '1' (gdb) p bytes1 [3] $ 5 = 51 '3' –

+0

Точно 'bytes1 [0] = 50', который является символом' '2''. Op хочет 'bytes1 [0] = 2' и т. Д. – DrYap

4

При создании массива вы должны использовать символьные литералы:

char bytes[4] = {'2', '0', '1', '3'}; 

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

Если вы хотите получить десятичное значение, представленное символом при чтении человеком (т. Е. «2» -> 2), вы можете сделать bytes[x] - '0', предполагая, что символы цифр смежны в кодировке символов (что верно для ASCII и UTF как минимум).

+2

десятичные цифры будут непрерывными и для всех наборов символов, разрешенных стандартом C, поэтому 'bytes [x] - '0'' всегда будет хорошо в соответствующей реализации. –

1

, если у вас есть массив символов и хотите, чтобы получить их значения как целые числа, вы можете сделать

int a = bytes[0] - '0'; 
Смежные вопросы