C++文本文件读取

发布于 2024-10-14 13:43:25 字数 500 浏览 6 评论 0原文

所以我需要一点帮助,我目前有一个文本文件,其中包含以下数据:

myfile.txt
-----------
b801000000

我想要做的是将 b801 等数据读取为位,这样我就可以获得

0xb8 0x01 0x00 0x00 0x00.

Current 的值,我正在将该行读入使用以下 typedef 的无符号字符串。

typedef std::basic_string <unsigned char> ustring;
ustring blah = reinterpret_cast<const unsigned char*>(buffer[1].c_str());

我不断失败的地方是现在试图让每个字符 {'b', '8' 等...} 真正成为 { '0xb8', '0x01' 等...}

任何帮助表示赞赏。

谢谢。

So I need a little help, I've currently got a text file with following data in it:

myfile.txt
-----------
b801000000

What I want to do is read that b801 etc.. data as bits so I could get values for

0xb8 0x01 0x00 0x00 0x00.

Current I'm reading that line into a unsigned string using the following typedef.

typedef std::basic_string <unsigned char> ustring;
ustring blah = reinterpret_cast<const unsigned char*>(buffer[1].c_str());

Where I keep falling down is trying to now get each char {'b', '8' etc...} to really be { '0xb8', '0x01' etc...}

Any help is appreciated.

Thanks.

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

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

发布评论

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

评论(3

愿得七秒忆 2024-10-21 13:43:25

我看到两种方法:

  1. 将文件打开为 std::ios::binary 并使用 std::ifstream::operator>> 提取十六进制双字节使用标志 std::ios_base::hex 并提取为两个字节大的类型(如 stdint.h 的 (C++0x/C99))之后uint16_t 或等效项)。有关使用 std::stringstream 的示例,请参阅 @neuro 对您的问题的评论。 std::ifstream 的工作方式几乎相同。

  2. 直接访问流迭代器并手动执行转换。更难、更容易出错,也不一定更快,但仍然很有可能。

I see two ways:

  1. Open the file as std::ios::binary and use std::ifstream::operator>> to extract hexadecimal double bytes after using the flag std::ios_base::hex and extracting to a type that is two bytes large (like stdint.h's (C++0x/C99) uint16_t or equivalent). See @neuro's comment to your question for an example using std::stringstreams. std::ifstream would work nearly identically.

  2. Access the stream iterators directly and perform the conversion manually. Harder and more error-prone, not necessarily faster either, but still quite possible.

站稳脚跟 2024-10-21 13:43:25

strtol 将字符串(需要一个以 null 结尾的 C 字符串)转换为具有指定值的 int根据

strtol does string (needs a nullterminated C string) to int with a specified base

世界等同你 2024-10-21 13:43:25

这样做的方式有点肮脏:

#include <stdio.h>

int main ()
{
  int num;
  char* value = "b801000000";

  while (*value) {
    sscanf (value, "%2x", &num);
    printf ("New number: %d\n", num);
    value += 2;
  }

  return 0;
}

运行这个,我得到:

New number: 184
New number: 1
New number: 0
New number: 0
New number: 0

Kind of a dirty way to do it:

#include <stdio.h>

int main ()
{
  int num;
  char* value = "b801000000";

  while (*value) {
    sscanf (value, "%2x", &num);
    printf ("New number: %d\n", num);
    value += 2;
  }

  return 0;
}

Running this, I get:

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