Чтение текстовых файлов C ++ - PullRequest
2 голосов
/ 26 января 2011

Так что мне нужна небольшая помощь, в настоящее время у меня есть текстовый файл со следующими данными:

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());

Там, где я продолжаю падать, я пытаюсь сделать так, чтобы каждый символ {'b', '8' и т. Д.} Был действительно {'0xb8', '0x01' и т. Д ...}

Любая помощь приветствуется.

Спасибо.

Ответы [ 3 ]

1 голос
/ 26 января 2011

Я вижу два пути:

  1. Откройте файл как std::ios::binary и используйте std::ifstream::operator>> для извлечения шестнадцатеричных двойных байтов после использования флага std::ios_base::hex и извлечения в тип,имеет размер два байта (например, stdint.h (C ++ 0x / C99) uint16_t или эквивалентный).Посмотрите комментарий @ neuro к вашему вопросу для примера использования std::stringstream s.std::ifstream будет работать почти одинаково.

  2. Доступ к потоковым итераторам напрямую и выполнение преобразования вручную.Сложнее и более подвержено ошибкам, не обязательно быстрее, но все же вполне возможно.

0 голосов
/ 26 января 2011

Вид грязного способа сделать это:

#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
0 голосов
/ 26 января 2011

strtol делает строку (нуждается в нулевой строке C) для int с указанной базой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...