2015-02-09 2 views
-1

Я ищу способ добавления строкового представления short int к существующей строке (хранящейся в unsigned char*).Добавление короткого int в неподписанный указатель на char

Единственное, что я могу сделать, это использовать memcpy(), но я хотел бы привести пример, если это то, что мне нужно использовать.

+0

Что именно вы пытаетесь достичь? И покажите нам, что вы пробовали. –

+3

«Я хочу добавить слона к мыши, единственное, что я думаю, что это можно сделать, - это использовать косилку». Вот как выглядит ваш вопрос :) – Drax

+0

У меня есть готовый неподписанный символ *, который содержит данные. Это код, который я получаю от метода, который я не могу редактировать. Я хочу добавить короткое значение int в конце этих данных. У меня нет кода для показа, так как я не знаю, с чего начать. @Drax: Мне это нужно как unsigned char * – Dries

ответ

0

Это вы что искали? Это рассматривает unsigned char * как строку и добавляет строковое представление короткого int к нему.

Не так много сказать, кроме ...

1) Использование неподписанные символ для представления строк является весьма необычным. Я бы сказал, что ваш первый шаг - преобразовать его в обычный указатель на символ.

2) Printf - ваш лучший друг при работе со строками стиля C.

#include <stdio.h> 
#include <string.h> 

// Returns a newly allocated buffer containing string concatenated with the string representation of append_me 
char * append (char * string, short int append_me) 
{ 
    // Assume that the short int isn't more than 5 characters long (+1 for space, +1 for possible negative sign) 
    char * result = new char[strlen(string) + 7]; 
    sprintf (result, "%s %hd", string, append_me); 
    return result; 
} 

// Just a wrapper method to abstract away unsigned char * nonsense. 
unsigned char * append (unsigned char * string, short int append_me) 
{ 
    return (unsigned char *)append ((char *) string, append_me); 
} 

int main() 
{ 
    // Not sure why we're using unsigned char, but okay... 
    unsigned char * the_string = (unsigned char *)"Hello World!"; 

    the_string = append (the_string, 574); 

    printf ("%s\n", the_string); 

    // We're responsible for cleaning up the result of append! 
    delete[] (the_string); 

    return 0; 
} 
+0

это обычно достигается с помощью stringstream в C++ .... – zoska

+0

Мое правило состоит в том, чтобы использовать API-интерфейс C для строк C и API строки C++ для строк C++. – QuestionC

0

Если вы хотите добавить свой номер в качестве строки как: String = «ала» и номер = 20 вы хотите получить результат = «ala20» вместо того, чтобы использовать сырые указатели (которые в большинстве случаев не требуется когда речь идет о C++), вы можете просто использовать std::stringstream, который может позволить вам добавить любой простой тип (и строки):

std::stringstream myStream; 
myStream << "I have "; 
myStream << 2; 
myStream << " apples."; 
std::cout << myStream.str() << std::endl; 

которая дала вам выход:

I have 2 apples. 

Если вы хотите сериализовать коротка, чтобы обугливается буфер (скопировать его байт в байт), вы можете использовать memcpy:

memcpy(&buffer[offset], &value, sizeof(value)); 

Конечно, вы должны иметь достаточно памяти после buffer+offset.

Вы не указали, какова цель этой операции. Если он предназначен для показа (например, первый), то std::stringstream - это путь. Если вы сохраняете некоторые данные в файл или передаете их через сокет, у второго меньше потребление памяти - для максимального значения short (32767) первой версии потребуется 5B (количество цифр - 1B на цифру), когда будет сохранена вторая версия любое значение short на 2B (при условии, что размер short равен 2B).

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