当我尝试使用 stringstream 时
#include <iostream>
#include <string>
#include <sstream>
int main() {
std::string s = "Hello World Test";
std::stringstream ss(s);
std::string a, b;
ss >> a >> b;
std::cout << a << ' ' << b << std::endl; // Hello World
ss << " Why Not";
ss >> a >> b;
std::cout << a << ' ' << b << std::endl; // Still Hello World
std::string c, d;
std::stringstream tt;
tt << s;
tt >> c >> d;
std::cout << …Run Code Online (Sandbox Code Playgroud) 我找到了代码:
static void PrintMACaddress(unsigned char MACData[])
{
printf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n",
MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
}
Run Code Online (Sandbox Code Playgroud)
此功能打印MAC地址 00-53-45-00-00-00
我的问题:
打印时如何制作这种格式std::stringstream?
更新:
谢谢大家的意见!
我不知道为什么,但有些解决方案没有static_cast<unsigned int>给我奇怪的字符,?-0?-0M-0?-0m-0?所以我选择了icecrime的boost版本:
void PrintMACaddressWithBoostFormat(unsigned char MACData[])
{
boost::format fmt("%02X-%02X-%02X-%02X-%02X-%02X");
for (int i = 0; i != 6; ++i)
{
fmt % static_cast<unsigned int>(MACData[i]);
}
std::stringstream valStream(fmt.str().c_str());
//testing
std::cout << "Boost version: " << valStream.str().c_str() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
Palmik的解决方案也很棒;)
谢谢!
是否有可能像这样串流?我试着用ifstream读取并转换它.
string things = "10 11 12 -10";
int i1;
int i2;
int i3;
int i4;
stringstream into;
into << things;
into >> i1;
into >> i2;
into >> i3;
into >> i4;
Run Code Online (Sandbox Code Playgroud)
我希望它是:
i1 = 10
i2 = 11
i3 = 12
i4 = -10
Run Code Online (Sandbox Code Playgroud)
那是对的吗?
可以多次使用相同的stringstream变量吗?
当我尝试时,第一次没问题,但其他一切都只是0.
所以我们有一些带有一些数据的字符串流.借助跨平台库,我们可以将其内容转换为gziped格式(您可以将其保存到扩展名为.tar.gz的文件中)
让我们进入代码:所以我有:
stringstream body;
body << std::ifstream( path.string().c_str(), ios::binary).rdbuf();
Run Code Online (Sandbox Code Playgroud)
我应该添加哪些函数,我应该调用哪个函数来编码stringstream以及调用哪个函数转而将编码数据放入stringstream?
BTW:有没有可以编码成gzip的boost库
"Bar"以下代码不是输出预期的字符串,而是输出看起来像指针的内容.
#include <sstream>
#include <iostream>
int main()
{
std::stringstream Foo("Bar");
std::cout << Foo << std::endl; // Outputs "0x22fe80."
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这可以通过使用来解决Foo.str(),但它在过去给我带来了一些问题.是什么导致这种奇怪的行为 它在哪里记录?
我写了以下测试代码:
int main(int argc, char* argv[]) {
stringstream ss;
int num;
ss << "54321";
ss >> num;
ss.str("");
ss << "12345";
ss >> num;
fprintf(stderr, "%d\n", num);
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,结果是54321.如何使用提取运算符(>>)正确覆盖变量?
在C++中,我有一些像这样的代码:
float hits = 10.12;
float mins = 2.19;
std::ostringstream ss;
ss.precision(2);
ss << std::fixed << hits << "%\n"
<< std::fixed << mins << "%";
std::cout << ss.str();
Run Code Online (Sandbox Code Playgroud)
哪个给了我这个输出:
10.12%
2.19%
Run Code Online (Sandbox Code Playgroud)
而我希望小数位对齐:
10.12%
2.19%
Run Code Online (Sandbox Code Playgroud)
有没有办法在小数点前填充空格,以便在小数位前有两位数的固定空格宽度?
c++ floating-point stringstream string-formatting text-alignment
在我的项目中,我使用一个名为Message的类,它继承自std :: ostringstream,打印出其他类类型的人类可读信息.
所以它的<<运算符多次重载我自己的类类型,我想打印出来.
class Message : public ostringstream
{
public:
Message() {};
virtual ~Message() {};
Message& operator <<(const MyTypeA &a) { return *this << a.getStr(); };
Message& operator <<(const MyTypeB &b) { return *this << b.identifier(); };
Message& operator <<(const MyTypeC &c) { return *this << c.foo(); };
// Pass everything unknown down to ostringstream, and always return a Message&
template<class T>
Message& operator <<(const T &t)
{
(std::ostringstream&)(*this) << t;
return *this;
}
};
Run Code Online (Sandbox Code Playgroud)
没有模板
MyTypeA a,b;
Message …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
stringstream ss;
ss << string("12");
int h;
ss >> h;
cout << h << endl;
ss.str(string("")); // clear the content of ss
ss << string("30");
int m;
ss >> m;
cout << m << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行上面的代码会产生一些随机输出:
12
0
Run Code Online (Sandbox Code Playgroud)
在某些其他时间,观察到以下输出:
12
4
Run Code Online (Sandbox Code Playgroud)
我期望输出简单:
12
30
Run Code Online (Sandbox Code Playgroud)
为什么我会得到意想不到的结果?
此外,string s在int i没有必要的C++ 11支持的情况下解析一个to 的最佳方法是什么?应该是int i = atoi(s.c_str())吗?
c++ ×10
stringstream ×10
string ×3
buffer ×1
c-strings ×1
compression ×1
constructor ×1
format ×1
iostream ×1
istream ×1
pointers ×1
templates ×1