C ++将int和string转换为char *

时间:2009-11-19 20:03:35

标签: c++ string char

这有点难,我无法理解。

我有一个int和一个字符串,我需要将它存储为char *,int必须是十六进制

int a = 31;
string str = "a number";

我需要将两个标签分开放入char *。

输出应该是这样的:

1F      a number

5 个答案:

答案 0 :(得分:20)

适当包括:

#include <sstream>
#include <ostream>
#include <iomanip>

这样的事情:

std::ostringstream oss;
oss << std::hex << a << '\t' << str << '\n';

复制结果:

oss.str().c_str()

请注意,c_str的结果是临时的(!)const char*,因此如果您的函数需要char *,则需要在某处分配可变副本。 (也许将其复制到std::vector<char>。)

答案 1 :(得分:4)

试试这个:

int myInt = 31;
const char* myString = "a number";
std::string stdString = "a number";

char myString[100];

// from const char*
sprintf(myString, "%x\t%s", myInt, myString);

// from std::string   :)
sprintf(myString, "%x\t%s", myInt, stdString.c_str());

答案 2 :(得分:2)

#include <stdio.h>

char display_string[200];
sprintf(display_string,"%X\t%s",a,str.c_str());

我已使用sprintf将您的号码格式化为十六进制。

答案 3 :(得分:1)

str.c_str()将返回以null结尾的C字符串。

注意:由于您的评论表明没有必要,因此不回答主要问题。

答案 4 :(得分:0)

那些写“const char * myString =”的数字“;” 只是糟糕的程序员。由于无法获得C基础知识 - 他们急于使用C ++并开始谈论他们根本不理解的事情。

“const char *”类型是一个指针。 “一个数字” - 是数组。你混合指针和数组。是的,C ++编译器有时允许管道输入。但是你也必须明白 - 如果你做管道输入而不是理解你的“持久性” - 你的所有程序都只是一个胶带。