关于未签名的char、char、BYTE和文件写入的问题
Questions about unsigned char, char, BYTE, and file writing
我有一个向量定义如下:
std::vector<char> contents;
我的目标是将文件读取到BYTE数组中,BYTE是未签名字符的typedef。我的尝试如下:
BYTE rgbPlaintext[] = {0x00};
std::ifstream in;
std::vector<char> contents;
in.open("test.dat", std::ios::in | std::ios::binary);
if (in.is_open())
{
// get the starting position
std::streampos start = in.tellg();
// go to the end
in.seekg(0, std::ios::end);
// get the ending position
std::streampos end = in.tellg();
// go back to the start
in.seekg(0, std::ios::beg);
// create a vector to hold the data that
// is resized to the total size of the file
contents.resize(static_cast<size_t>(end - start));
// read it in
in.read(&contents[0], contents.size());
BYTE *rgbPlaintext = (BYTE*)&contents[0] ;
}
但是,当我使用以下内容将rgbPlainText写入文件时:
std::ofstream f("testOut.dat",std::ios::out | std::ios::binary);
for(std::vector<char>::const_iterator i = contents.begin(); i != contents.end(); ++i)
{
f << *rgbPlaintext;
}
这只是一排空位。test.dat文件包含易读的文本。如何使其正确工作?当我将向量更改为无符号char,而不是现在定义的仅为char时,我在"读入"步骤中出现错误,称预期的参数类型为char*,而输入的参数为无符号char*。因此问题如下:
- 我对文件的写入是否正确?如果没有,正确的方法是什么
- 如何将char的向量转换为无符号char的向量
谢谢。
这里有一个作用域问题。在说BYTE *rgbPlaintext = (BYTE*)&contents[0] ;
的地方,在if
语句后面的大括号内声明了一个名为rgbPlaintext
的变量。从编译器的角度来看,这与您在程序开始时声明的rgbPlaintext
不同。一旦将值分配给第二个rgbPlaintext
,就会遇到右大括号,这只会导致该值被丢弃。
顶部的语句应该是
BYTE *rgbPlaintext;
并且结束大括号之前的最后一个语句应该是
rgbPlaintext = (BYTE*)&contents[0] ;
没有BYTE *
部分。
这样,您仍然可以访问if
语句后面的代码中的rgbPlaintext
。
相关文章:
- 构造函数 (C++) 中的 char 指针参数存在问题
- 没有'str'成员在 GCC 和 Clang 'std::basic_ostream<char>',但 MSVC 没有问题
- 通过指针使用C++还原char数组时出现问题
- "char(a)" C++的问题
- 愚蠢的问题:strcat和char指针
- 语法问题:"char [5] const &"是什么意思?
- 如何将char数组声明为函数参数?或告诉我此代码中还有其他问题?
- Char 数组的问题,如何正确构造和显示它们
- 使用C ,将转换为char的问题始终具有3位数字
- 将 char* 推送到矢量时出现问题,但在每次迭代后,它会将指向相同值缓冲区的指针添加到矢量中
- char,const char*阵列问题,用于mqtt client.publish
- 以C++语言打印 CHAR 数组时出现问题
- 将 API 函数参数从 'char *' 更改为"const char *"有哪些潜在问题?
- 接受类型char的输入的问题
- 有人能解释一下getline和char的问题吗
- Windows 10中的Char*的内存分配问题
- 将 char * 与字符串文本进行比较时出现问题
- 正在将文件转换为char*问题
- c++中的char*问题
- 从'int'到'const char*'问题C++的转换无效