繁体   English   中英

如何在C ++中将ASCII文本文件中的(小)整数读取为足够的数据数组

[英]How to read (small) integers from ASCII text files into adequate data arrays in C++

我想从ASCII文本文件(由空格分隔)中加载一堆整数,知道数据范围是先验的(例如0-255)。 我的问题是我无法在右侧为“ unsigned char”类型的输入流中使用“ >>”运算符读取此类数字。 数据文件可能如下所示:

12 42 0 127 255  

(只是在这很重要的情况下:最后有一个换行符,但是即使我添加了两个空格,该编辑器似乎也忽略了它。)这是我的示例代码:

#include <cstdint>
#include <fstream>
#include <iostream>

using Datum = uint_least8_t; // Does not work.
// using Datum = unsigned char; // Does not work either (is "usually" the same as above).
// using Datum = char; // Does not work -- as expected. But why does this not store the blanks?
// using Datum = uint_least16_t; // Works.

int main()
{
  std::ifstream is( "data.txt", std::ifstream::in ); // not std::ifstream::binary
  constexpr std::size_t n = 5;
  Datum data[n];
  for( std::size_t i = 0; i < n; ++i )
    is >> data[i];

  for( std::size_t i = 0; i < n; ++i )
    std::cout << "\"" << data[i] << "\" ";
  std::cout << "\n";

  return 0;
}

对于前三个typedef,结果是

"1" "2" "4" "2" "0"

那么谁能告诉我为什么会这样,以及如何解决呢? 我不喜欢将数字临时存储在不必要的大数据类型(甚至只是)中的想法。

unsigned char是特殊的-标准库正在应用其特殊情况的“解释和转换ASCII字符”算法,因此从文件中读取“ 2”将导致unsigned char值为50而不是2

对于任何实际上只是charunsigned char别名的“类型”,也将是这种情况,例如uint_least8_t (可能)。

改为读为int ,然后根据需要转换为unsigned char

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM