2012-06-30 3 views
0

Im пытается извлечь два значения (int32_t) и поместить их в массив символов.объединить два целочисленных значения в массив символов

int32_t version = getVersion(); 

if (version < 0) 
{ 
    return; 
} 
else 
{ 
    //first part of number needs to be shifted right 
    int32_t major = (((version) >>16) & 0xFFFF); 
    int32_t minor = ((version) & 0xFFFF); 

    // need to concatenate these two values, and place a "." between them 

    setVersion(...);//requires a char array, should for example be "1.1" 
} 

Может ли кто-нибудь дать мне совет по наилучшему способу сделать это? без использования std :: строк. Я бы предпочел массив символов.

Заранее спасибо

+0

Пожалуйста, покажите ожидаемый ввод и вывод. – robert

ответ

6

Вы можете использовать strstream

char v[255] = {}; 
{ 
    std::strstream vs(v, 254); 
    vs << major << '.' << minor; 
} 
setVersion(v); 
+0

Спасибо Johannes – user1381456

0

Вот еще один способ сделать это.

snprintf(charArray, sizeof(charArray), "%d.%d", major, minor); 

// Please check the correctness for format specifier and verify the return 
// value too. 

Если вы находитесь на платформе Windows, используйте _snprintf_s.

+0

, который выглядит хорошо, какой размер мне потребуется для создания массива символов? как им извлекать эти два значения плюс «.»? – user1381456

+2

Как и в случае с Johannes, вам нужно иметь определенный размер по умолчанию с нулевой инициализацией. Вы можете подсчитать количество цифр в мажорном, второстепенном, используя некоторую логику, и установить динамический размер 'charArray', учитывающий размер major + dot + minor + null. Но это зависит от вас, как реализовать. – Mahesh

+0

Я бы счел это хорошим советом для C. Но для C++ существует опасность неправильных типов (и нет необходимости в скорости), чтобы использовать это как допустимое использование. –