繁体   English   中英

读取二进制文件C ++

[英]reading binary files C++

我想寻求帮助...我从C ++开始,我在学校得到了这道功课...我们必须编写函数bool UTF8toUTF16 (const char * src, const char * dst ); 它应该读取以UTF-8编码的src文件,并将其写入dst文件,但以UTF-16格式。 除了在我的代码中,我们也不得使用任何其他库...

因此,我要做的第一件事是制作一个文件“ xx.txt”,并在经典的Windows记事本中编写了例如char'š'的文字。 然后我试图编写一个程序,以二进制模式(逐字节(或逐字节))读取此文件的每个字符,并打印其值...但是我的程序不能那样工作...

所以我有这个文件“ xx.txt”,其中只有“š”具有UTF-8值“ c5 a1”,UTF-16值“ 0161”和Unicode值“ 161”,我想结果是它将打印:i = 161(十六进制)或至少接近此结果的值...

到目前为止,这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <iomanip>
#include <iostream>
#include <fstream>

using namespace std;

int main ( void ) {
    char name[] = "xx.txt";
    fstream F ( name, ios::in | ios::binary );
    unsigned int i;
    while( F.read ((char *) & i, 2))
    /* I dont know what size to write there - I would guess it s '2' - because I need 2     bytes for the char with hexUTF-16 code '0161', but 2 doesnt work*/
    cout << "i = " << hex << i << " (hex) ";
    cout << endl;
    F.close();
    system("PAUSE");
    return 0;}

提前致谢

尼古拉斯·吉莎(NikolasJíša)

在解析完字符之前,您不知道utf8中的字符有多大,您需要一次读取一个“字符”,直到您拥有完整的utf8字符为止。

编辑-您没有说输出的内容-但我怀疑这是字节排序问题。
您可能最好将输入(如果您知道它始终是16位值)读入char数组,然后查看各个字节。

参见http://www.joelonsoftware.com/articles/Unicode.html

如果您的输入使用UTF-8,则需要一次读取一个字节,而不是两个字节(您需要让i输入unsigned char类型)。 这为您提供了二进制数据流,您需要按照UTF-8规范对其进行解码,这将产生一个unsigned int (Unicode代码点)流,然后您需要根据UTF重新对其进行编码。 -16规格

这取决于。 如果类的作用是包含此类对象(例如,容器类),则其非常惯用且是正常的处理方式。 但是,在大多数其他情况下,最好使用getter和setter方法。 不一定要命名为getXxx和setXxx--我见过的最常见的命名约定是使用m_attr作为属性的名称,而只是将attr用作getter和setter的名称。 (运算符重载将根据参数的数量在它们之间进行选择。)

詹姆斯·坎泽

暂无
暂无

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

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