【发布时间】:2012-07-11 05:33:00
【问题描述】:
这是我的问题,我想打开一个 .jpg 文件并将每个字节作为用逗号分隔的十进制数 (0-255) 写入另一个 .txt 文件。现在它应该能够使用该 txt 文件再次构建 .jpf 文件。我就是这样做的。
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
long x;
char *s;
ifstream ifs("image.jpg",ios::binary);
ifs.seekg(0,ios::end);
x=ifs.tellg();
ifs.seekg(0,ios::beg);
s=new char[x];
ifs.read(s,x);
ifs.close();
ofstream is("image.txt");
for(int i=0;i<x;i++){
is<<(unsigned int)s[i]<<",";
}
现在这个程序用十进制数字创建 image.txt,如下所示, 4294967295,4294967256,4294967295,4294967264,0,16,74,70,73,70,0,1,...... 这里有些数字似乎有 4 个字节长,s[i] 只指一个字节,所以 (int)s[i] 如何返回一个大于 255 的数字。请有人帮我解决这个问题....谢谢..
【问题讨论】:
-
您正在读取的字符不是 0 到 255 的无符号数,而是 -128 到 +127 的有符号数。当您转换为 unsigned int 时,负数将被转换为大量正数。请尝试使用 unsigned char 数组。