将short int添加到unsigned char指针

时间:2015-02-09 14:05:08

标签: c++ pointers

我正在寻找一种方法将short int的字符串表示附加到现有字符串(存储在unsigned char*中)。

我认为唯一可以做到的就是使用memcpy(),但我想要一个例子,如果这是我需要使用的东西。

2 个答案:

答案 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)。