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

7

这有点难,我想不出来。

我有一个int和一个string,需要将它们存储为char*,其中int必须是十六进制的。

例如:

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

我需要将两个字符串用制表符分隔后放入char*中。
输出应该像这样:
1F      a number

注意:我不需要以那种格式打印它。我可以做到。我有一个以char*作为参数的函数。我需要将其转换,以便我可以在该函数中使用。 - user69514
5个回答

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> 中。)

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());

const char *开始,改用std::string - David Thornley
3
任何现代的C++编译器只要允许链接到C运行库,就可以编译这段代码(Jacob的代码以Windows为中心,但仍可在该平台上工作)。个人而言,我一直讨厌C++ I/O库中过载的<<操作符,但我想每个人都有自己的喜好。 - Mike Marshall

2
#include <stdio.h>

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

我使用了sprintf来将您的数字转换为十六进制格式。


1
好的,OP想要使用char*,因此sprintf并不是那么不必要! - Jacob
3
Jacob更新了答案,使用了sprintf函数。而且自从什么时候在C++代码中使用C库函数违法了? - Michael Kristofik
1
@Kristo:我同意,特别是因为我仍然觉得使用iostreams进行格式化更加难以阅读(甚至在第一次尝试时就很难做对)。但是,我认为应该考虑使用snprintf()而不是sprintf() - Michael Burr
2
是的,在C++中使用C函数通常要容易得多。无论是否是“好的做法”...无论那意味着什么。 - jheriko
对于长度为200的缓冲区,返回-1。如果我们采用问题中给出的“str”,那么它太大了;或者不够大(如果“str”长度未知)。 - Steve Jessop
显示剩余5条评论

1

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

注意:由于您的评论表明回答主要问题不必要,因此本文不涉及主要问题。


0

那些写下 "const char* myString = "a number";" 的人只是糟糕的程序员。他们没有掌握 C 基础知识,就匆忙进入 C++ 并开始谈论他们根本不理解的事情。

"const char *" 类型是一个指针。"a number" 是数组。你混淆了指针和数组。是的,C++ 编译器有时允许鸭子类型。但你必须明白 - 如果你不理解你的“鸭性”在哪里,所有的程序都只是一卷胶带。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接