2015-09-09 4 views
-3

У меня есть этот код:Как извлечь целое число от характера

  int num[10] ;    
      sscanf(msg, "%d%d%d%d%", &num[0], &num[1], &num[2], &num[3]); 
      int x = num[0]; // integer 
      int y = num[1]; // integer 
      int z = num[2]; // integer 
      int c = num[3]; // integer 

я получил проблему из приведенного выше кода, когда я пишу «131249», так что результат:

x = 177 
y = -8755 
z = -21206 
c = -246 

но ожидаемое значение должно быть

x = 13 
y = 12 
z = 4 
c = 9 

Как получить ожидаемое значение, есть ли какие-либо ошибки в моем коде?

+0

Строка «131249», которую вы вводите, интерпретируется как одно целое число. (sscanf должен вернуться 1.) Попробуйте «13 12 4 9». Значения y, z и c - это то, что происходит в памяти. (Хотя, по общему признанию, я не могу объяснить значение 177.) –

+2

Если вы пишете «131249», как вы можете ожидать 13 12 4 9? Почему не 131 2 4 9 или 1 3 12 49? – 5208760

+0

PeterSchneider и Mateusz Kwaśniak, да это сработало с интервалом, но вход принудительно «131249» – athirah

ответ

2

Если длина значений фиксирована, вы можете указать длину каждого значения, которое вы пытаетесь захватить. Пример:

sscanf(msg, "%2d%2d%1d%1d%", &num[0], &num[1], &num[2], &num[3]);

+0

Что произойдет, если вход поступает из шестнадцатеричного? например 0A ... 1F .. 12 .. – athirah

+0

Чтобы прочитать шестнадцатеричные значения, вы должны использовать% x вместо% d. Атрибут длины должен также работать (т. Е.% 2x) –

+0

, если у меня есть значение '0x33D', как печатать отдельно? например, «0x03'' 0x3D» – athirah

0

Это трудно поверить, что если вы сделали Printf х, что вы увидели бы 177. Это должно быть 131249 на основе кода. Попробуйте предложение Николаса. Вы также можете инициализировать свой массив num, т. Е.

int num [10] = {0};

+0

если 'sizeof (int) == 2', 131249 будет сохранен как 177 (' 131249 & 0xFFFF == 177'). – mch

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