我正在寻找一种方法将short int
的字符串表示附加到现有字符串(存储在unsigned char*
中)。
我认为唯一可以做到的就是使用memcpy()
,但我想要一个例子,如果这是我需要使用的东西。
答案 0 :(得分:0)
这是你正在寻找的吗?这将unsigned char *视为一个字符串,并且'追加'它的短整数的字符串表示。
除了......之外没什么好说的。
1)使用unsigned char表示字符串是非常不寻常的。我说你的第一步是将它转换为正常的字符指针。
2)使用C风格字符串时,Printf是你最好的朋友。
#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;
}
答案 1 :(得分:0)
如果您想将您的号码添加为字符串,例如:string =&#34; ala&#34;和数字= 20你想得到结果=&#34; ala20&#34;而不是使用原始指针(在大多数情况下,在C ++中是不必要的),你可以使用std::stringstream
,它可以让你追加任何简单的类型(和字符串):
std::stringstream myStream;
myStream << "I have ";
myStream << 2;
myStream << " apples.";
std::cout << myStream.str() << std::endl;
哪个会给你输出:
I have 2 apples.
如果要将short序列化为char缓冲区(将其复制到字节),可以使用memcpy
:
memcpy(&buffer[offset], &value, sizeof(value));
当然,你需要在buffer+offset
后有足够的内存。
您没有说明,此操作的目的是什么。如果它用于显示目的(如第一个),则std::stringstream
是要走的路。如果要将一些数据保存到文件或通过套接字传递它们,则第二个具有较少的内存消耗 - 对于最大值short
(32767),第一个版本将需要5B(数字位数 - 每个数字1B),当第二个版本将保留2B上的任何短值(假设short
大小为2B)。