- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试编译此代码时:
std::fstream file("file.name", std::ios::out | std::ios::binary);
uint8_t buf[BUFSIZE];
//Fill the buffer, etc...
file.write(buf, BUFSIZE);
编译器会警告我从
unsigned char
进行的 oh-not-so-healthy 转换至
char
调用
write()
.如
std::fstream
实际上只是
std::basic_fstream<char>
的 typedef , 可以认为使用
std::basic_fstream<uint8_t>
而是允许他们在没有警告的情况下编译上面的代码,如
write()
需要模板类型的指针。
std::basic_fstream<uint8_t> file("file.name", std::ios::out | std::ios::binary);
uint8_t buf[BUFSIZE];
//Fill the buffer, etc...
file.write(buf, BUFSIZE);
现在调用
write()
将失败,即使以前的版本正在运行(忽略编译器警告)。我花了一段时间来查明标准 C++ 库代码中异常是从哪里引发的,但我仍然不太明白这里的情况。看起来像
std::basic_fstream
使用一些字符编码机制,并且因为有一个为
char
定义的但
unsigned char
没有,文件流在尝试使用“错误的”字符数据类型时会静默失败……至少我是这么看的。
uint8_t
类型的数组的原因。 ,而不是 char,使用这种数据类型感觉更自然,而不是普通的旧
char
.但在我决定放弃
uint8_t
之前数据类型,只接受使用
char
缓冲区,或开始使用自定义数组
byte
数据类型定义为
char
,我想问两个问题:
std::basic_fstream<uint8_t>
,无论它多么(不)合理 - 有没有办法实现这一点? 最佳答案
std::basic_fstream<unsigned char>
不起作用,因为它使用 std::char_traits<unsigned char>
但标准库没有提供这样的特化,见 std::char_traits
完整的细节。
如果你想读/写二进制数据,你需要使用std::basic_fstream<char>
, 用 std::ios_base::binary
打开它标记并使用 std::basic_ostream<CharT,Traits>::write
写入二进制数据的函数。
这是一个遗留问题,因为所有 char
类型可用于表示二进制数据。标准库使用 char
可能是因为这是最短的打字和阅读工作。
What exactly is that mechanism that stops me from using unsigned character datatype?
std::char_traits<unsigned char>
特化。
Is it really something related to character encoding, or does it serve some other purpose?
std::char_traits
在其接口(interface)中准确定义了一些用途,但不包括解码/编码。后者由
codecvt
完成,请参阅那里的用法示例。
Why file stream works fine with signed character data types, but not for unsigned ones?
std::basic_ostream<CharT,Traits>::write
接受
CharT
,您为流指定的第一个模板参数。它写入与读取相同的字符类型并使用
codecvt
从
CharT
转换为字节。
Assuming that I still would want to use
std::basic_fstream<uint8_t>
, regardless how (un)reasonable it is - is there any way to achieve that?
std::char_traits
创建另一个类接口(interface)并将其指定为标准流的第二个模板参数。我想,你需要一个非常强大(哲学)的理由来卷起袖子去做。
std::fstream<char>
做
stream.write(reinterpret_cast<char const*>(buf), sizeof buf);
.
关于c++ - 为什么 std::basic_fstream<unsigned char> 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64884491/
我正在使用 clang/llvm 8.0.0 在 macOS 上编译它。为 C++14 编译。 #include #include using namespace std; basic_fstre
我有以下代码: #include #include int main(int argc, char *argv[]) { if (argc != 2) { std::cou
尝试编译此代码时: std::fstream file("file.name", std::ios::out | std::ios::binary); uint8_t buf[BUFSIZE]; //
当我打电话 void fileOpen(const char* fname_){file_.Open(fname_,ios::in|ios::out|ios::ate|ios::binary);};
我正在比较这两个类,因为它们都与其他事物相关联。 std::basic_fstream 必须与文件相关联,而 std::unique_lock 必须与互斥锁相关联。因此,提供一个 open() 方法似
我使用 fstream 打开文件进行写入。 fstream streamFile; streamFile.open ( "C:\\path\\to\\textFile.txt", fstream::
我为操作系统类(class)分配了一个作业,该作业应该使我们熟悉C++(我们的部门不在入门级授课)。在项目中,我们必须读取文件。我试图创建一个名为FileIO的类,该类可以处理大部分文件读取,它只需要
我收到以下编译器错误:no match for 'operator}' and 'Word') 这个错误的原因是什么? 下面是重现错误的最小示例: #include #include struct
我正在尝试一个文件处理程序来输入一条记录,并在另一个程序中尝试删除一条记录。我似乎遇到了这个错误- 没有匹配函数来调用 `std::basic_fstream >::open(const char[8
我正在尝试导入一个测试 JSON 文件并解析它。我一直得到错误的数据类型。如何加载“const char”友好文件? 代码: #include "include/rapidjson/document.
我是一名优秀的程序员,十分优秀!