2013-10-31 32 views
0

我有一个文件在winhex中打开,看起来像下面。如何删除使用宽字符到多字节的字符串字符之间的空格?

1F 00 48 3A 18 00 00 00 53 00 70 00 6F 00 75 00 73 00 65 00 5F 00 61 00 7A 00 61 00 6D 00 00 00

我读从文件上述十六进制数据并将其写入文本文件。我的代码如下。

#include<stdlib.h> 
#include<stdio.h> 
#include<iostream.h> 
int main() 
{ 
FILE *pFile, *tempFile; 
char *Main_buffer; 
int nOfRecord, TotalSize, data=0; 
pFile = fopen("C:\\wab files\\Main.wab", "rb"); 
if(pFile == NULL) 
{ 
    fputs("file error", stderr); 
    exit(1); 
} 
tempFile = fopen("C:\\myfile.text","wb"); 
if(tempFile == NULL) 
{ 
    fputs("file not open", stderr); 
    exit(2); 
} 
fread(&nOfRecord, 1, 4, pFile); 
fread(&TotalSize, 1, 4, pFile); 
data = TotalSize; 
char* Main_buffer = (char*)malloc(data*sizeof(data)); 
fread(Main_buffer, 1, TotalSize, pFile); 
fwrite(Main_buffer, 1, TotalSize, tempFile); 
free(Main_buffer); 
return 0; 
} 

该代码给出了一个文本文件,其中的数据写入如下。

p a l @ g m a l l。 c 0

在上面的数据中,每个字符之间都有一个空格。如何从数据中删除空间,并写入文本文件。请通过编写一些代码来解释宽字符到多字节的例子。提前致谢。

+1

它可能写成UTF-16字符串(即宽字符)。您可以以宽字符的形式阅读它,然后将其作为宽文件处理,或者手动或使用其他格式转换为其他格式。 WideCharToMultiByte – Rup

+1

十六进制值表示一个UNICODE字符串。如果你想在一个文本文件中,你可以缩小它为一个ANSI字符串,如果可能的话,或者你可以打开它作为unicode文件。我想大多数编辑会自动使用unicode,如果你有一个特定的字节头文件的第一件事情。 – nvoigt

+0

@Rup:我怎么能从WideCharToMultiByte转换它,请通过写代码告诉我。 –

回答

1

基本上有2种方式做这件事的:

  1. 从生成的ASCII事情手动删除空间。

  2. 使用图书馆为您完成工作(当然,如果您被允许)。我更倾向于去朝 http://en.wikipedia.org/wiki/Iconv

其中(如维基百科页面上说的)在海湾合作委员会自由的实现,所以你可以尝试用它玩。 这里链接到Linux的lib: http://www.gnu.org/software/libiconv/#TOCintroduction

UPDATE

这里是如何使用libiconv的℃的例子: http://www.gnu.org/software/libc/manual/html_node/iconv-Examples.html

0

尝试使用的strtok()从<字符串。 h>。

相关问题