将 ASCII std::string 转换为十六进制

发布于 2024-11-07 08:29:51 字数 478 浏览 0 评论 0原文

有没有一种简单的方法可以将 ASCII std::string 转换为 HEX?我不想将其转换为数字,我只想将每个 ASCII 字符转换为其十六进制值。输出格式也应该是 std::string。 即:“TEST”将是“0x54 0x45 0x53 0x54”或某种类似的格式。

我找到了这个解决方案,但也许有更好的解决方案(没有字符串到整数到字符串的转换):

std::string teststring = "TEST";
std::stringstream hValStr;
for (std::size_t i=0; i < teststring.length(); i++)
{
    int hValInt = (char)teststring[i];
    hValStr << "0x" << std::hex << hValInt << " ";
}

谢谢,
/mspoerr

is there an easy way to convert an ASCII std::string to HEX? I don't want to convert it to a number, I only want to convert each ASCII character to it's HEX value. The output format should also be a std::string.
i.e.: "TEST" would be "0x54 0x45 0x53 0x54" or some similar format.

I found this solution, but maybe there is a better one (without string to int to string conversion):

std::string teststring = "TEST";
std::stringstream hValStr;
for (std::size_t i=0; i < teststring.length(); i++)
{
    int hValInt = (char)teststring[i];
    hValStr << "0x" << std::hex << hValInt << " ";
}

Thanks,
/mspoerr

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

如果您不关心 0x,那么使用 std::copy 很容易做到:

#include <algorithm>
#include <sstream>
#include <iostream>
#include <iterator>
#include <iomanip>

namespace {
   const std::string test="hello world";
}

int main() {
   std::ostringstream result;
   result << std::setw(2) << std::setfill('0') << std::hex << std::uppercase;
   std::copy(test.begin(), test.end(), std::ostream_iterator<unsigned int>(result, " "));
   std::cout << test << ":" << result.str() << std::endl;
}

If you don't care about the 0x it's easy to do using std::copy:

#include <algorithm>
#include <sstream>
#include <iostream>
#include <iterator>
#include <iomanip>

namespace {
   const std::string test="hello world";
}

int main() {
   std::ostringstream result;
   result << std::setw(2) << std::setfill('0') << std::hex << std::uppercase;
   std::copy(test.begin(), test.end(), std::ostream_iterator<unsigned int>(result, " "));
   std::cout << test << ":" << result.str() << std::endl;
}
尽揽少女心 2024-11-14 08:29:51

此答案到另一个我想,问题就是你想要的。您必须添加一个 " " 作为 ostream_iterator 的分隔符参数才能获取字符之间的空格。

This answer to another question does what you want, I think. You'd have to add a " " as separator argument for the ostream_iterator to get whitespaces between the characters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文