C ++文本文件阅读

时间:2011-01-26 18:04:06

标签: c++ file-io formatting

所以我需要一些帮助,我现在有一个文本文件,其中包含以下数据:

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

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

的值
0xb8 0x01 0x00 0x00 0x00.

当前我正在使用以下typedef将该行读入无符号字符串。

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

我继续摔倒的地方现在试图让每个char {'b','8'等等......真的变成{'0xb8','0x01'等......}

感谢任何帮助。

感谢。

3 个答案:

答案 0 :(得分:1)

我看到两种方式:

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

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

答案 1 :(得分:0)

strtol将字符串(需要一个空终止的C字符串)转换为具有指定基数的int

答案 2 :(得分:0)

一种肮脏的方式:

#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