【问题标题】:How do I put a int32_t into a char array? (c++)如何将 int32_t 放入 char 数组? (c++)
【发布时间】:2013-09-18 16:43:39
【问题描述】:

我该怎么写:

int32_t x = someValue;

进入我的 char 数组:

char * msg = new char[65546]();

任何帮助将不胜感激!

【问题讨论】:

  • 取决于您要使用的字节序。
  • 你想得到整数中数字的字符串版本吗?那么您可能想查看std::to_string。如果要使用字符串,请使用std::string 而不是字符数组。
  • 您想将 int32_t 值 x 转换为字符数组吗?
  • @Martin 我想要数字的字符串表示,以便我可以将其打印到控制台。

标签: c++ int


【解决方案1】:

这完全取决于您要在数组中存储值的方式。 如果要逐字节存储,可以使用以下代码:

 int32_t x=someValue;
 char *ptr = (char*)&x;
 char *msg = new char[5];
 for(int i=0;i<4;++i, ++ptr)
    msg[i] = *ptr;

使用上述方法时应小心。因为有些系统使用 big-endian,而其他系统可能使用 little-endian。

另一方面,如果您想将逐位存储到char 数组中,请使用以下命令:

 int32_t x=someValue;
 int digs[12], count=0;
 char *msg = new char[12];
 while(x>0)
 {
     digs[count++]=x%10;
     x/=10;
 }
 int i=0;
 while(count--)
 {
     msg[i++] = digs[count] +'0';
 }

任何一种方式都有效。但最好选择第二个。因为它很容易转换回整数。

【讨论】:

  • 第二种方法正是我想要的,感谢nitish712!
【解决方案2】:

如果你想打印值,为什么不直接做呢?

std::cout << "x = " << x << '\n';

【讨论】:

  • 我认为应该是"\n" 而不是'\n' ??
  • 在我的应用程序中,由于某种原因,它没有显示 std::cout。但我可以在屏幕上打印字符数组。
  • 对不起。我的错。忽略它。我忘了单引号可以用于单个字符...
  • @CodeDoctorJL 这可能是您应该问的问题。不要只是做随机的事情,直到你找到似乎有用的东西。找出为什么你 std::cout 不适合你。
  • @barnes53,是的,你是对的。稍后我将对此进行搜索。
【解决方案3】:
    char* msg = new char[123];
int32_t x = 123;
int offset = 0;
memcpy(msg + offset, reinterpret_cast<char*>(&x), sizeof(int32_t));

【讨论】:

  • 抱歉,我刚刚注意到您对您的问题的进一步评论。如果您想将值打印为字符串,您可以按照 Joachim 的建议轻松执行此操作,否则您可以使用 std::to_string(x) 或 itoa 函数。
猜你喜欢
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
相关资源
最近更新 更多