gpt4 book ai didi

C++11:当前导字符为 alpha (abcdef) 时如何从 stringstream 解析十六进制字符串

转载 作者:行者123 更新时间:2023-12-01 14:18:29 25 4
gpt4 key购买 nike

我正在尝试根据 https://en.cppreference.com/w/cpp/io/manip/hex 中的示例从 std::stringstream 中读取一个十六进制值.当字符串的前导字符是数字字符 [0-9] 时,一切正常,但是当前导字符是字母字符 [a-f,A-F] 时,从流中获取值会消耗字符但不会分配值到整数。是否需要设置一个标志或其他东西来告诉 stringstream 或 std::hex 这实际上是一个有效的十六进制值并且应该这样解释?

我可能最终会从流中读取一个字符串并使用 std::stoi,但想知道为什么直接从字符串流中解析不起作用或者是否有办法让它起作用。

示例代码:

#include <iostream>
#include <sstream>
#include <string>
int main()
{
int anint = 0;
std::stringstream ss;
ss.str("1234abcd");
ss >> std::hex >> anint;
printf("anint = %x\n", anint);

anint = 0;
ss.str("a234abcd");
ss >> std::hex >> anint;
printf("anint = %x\n", anint);

return 0;
}

输出:

anint = 1234abcd
anint = 0

最佳答案

代码中的(主要)问题是您在第一次读取字符串流后没有清除 EOF 标志!此外,如果您的系统使用 32 位 int 类型,值 a234abcd 将溢出,您将(可能)得到一个值 0x7FFFFFFF(即 INT_MAX)。

下面的代码给出了(我认为)你想要的:

#include <iostream>
#include <sstream>
#include <string>

int main()
{
int anint = 0;
std::stringstream ss;
ss.str("1234abcd");
ss >> std::hex >> anint;
printf("anint = %x\n", anint);

ss.clear(); // Clear EOF flag!
anint = 0;
// ss.str("a234abcd");// Will overflow 32-bit int!
ss.str("a234abc"); // Works 'properly'
ss >> std::hex >> anint;
printf("anint = %x\n", anint);

return 0;
}

随时要求进一步澄清和/或解释。

关于C++11:当前导字符为 alpha (abcdef) 时如何从 stringstream 解析十六进制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61392083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com