2011-12-20 122 views
0

我试图用C++编写一个程序,该程序需要2个文件并逐字节比较它们。从每个字节的文件字节读取C++

我一直在寻找在下面的帖子

Reading binary istream byte by byte

我不是真的肯定的这个部分。当使用get(char & c)时,它读入一个char并将其存储在c中。这是存储为,比如说0x0D,还是存储实际的char值“c”(或其他)?

如果我希望使用这种方法比较两个文件逐字节比较我只是用get(char & c)然后比较获得的字符,或者我需要投到字节?

(我想开始一个新的岗位会更好,因为原来是很旧的)的整数

+0

“这是存储作为,说0X0D,或者是存储实际的字符值“c”(或其他)?“这是同一件事。 – 2011-12-20 11:15:54

+0

我不明白这个问题。一个'char'的值实际上是一些字节(你可以毫无困难地将它转换为int)。一些实现(编译器+系统)具有'无符号'(例如从0到255),其他实现(例如从-128到127 IIRC)。 – 2011-12-20 11:16:10

+2

如果您需要二进制数据使用无符号字符,请不要使用char。 – AlexTheo 2011-12-20 11:25:47

回答

2

char s为不过是“特殊类型的存储”(原谅表达),在内存中有在'A'和十进制值65(假定为ASCII)之间没有差别。

c换句话说将包含来自文件的读取字节。


要回答您添加的问题;不,没有演员需要做c1 == c2就好了。


char c1 = 'A', c2 = 97, c3 = 0x42; 

    std::cout << c1 << " " << c2 << " " << c3 << std::endl; 
    std::cout << +c1 << " " << +c2 << " " << +c3 << std::endl; 

/*写作+c1上面会投c1int,这是同样的事情写(int)c1或更正确的(C++ ISH)static_cast<int> (c1)*/

输出:

A a B 
65 97 66 
0

埃姆,

一个字符包含1个字节 该值的解释确实取决于你,程序员。

如果您在cout流中打印该字节,它将通过ASCII码解释,因此如果您的字符是0x63,那么它将在屏幕上打印'c'。

如果你只是使用值,只要你喜欢,你可以使用它..

char c = 0x63; 
c++; 
// c is now: 0x64 

请注意,您也可以输入小数

+0

啊。对。干杯 – discodowney 2011-12-20 11:19:45