如何从二进制文件中读取纯文本?

时间:2016-01-18 11:07:07

标签: c regex

我有以下文字包含控制字符,请看图像,当我从Notepad ++复制到这个问题时,这些控制字符不显示

enter image description here

有没有办法在本文中只获取“HIEUDT”字符串?我不知道带控制字符的子串函数

在另一种语言中,也许我会使用\a字符和0x04使用正则表达式开头,但在C中我没有使用它的经验

3 个答案:

答案 0 :(得分:3)

您可以使用标准字符串函数:

char *start = memchr(data, '\x07', datalen);
start++;
char *end = memchr(start, '\x14', datalen-(start-data));
int len = end - start;
char str[len+1];
memcpy(str, data, len);
str[len] = '\0';

您当然必须检查memchr每次都不会返回NULL

答案 1 :(得分:1)

   int i=0, j=0;
   while ((data[i] != 0x07) && (i<dataLen))
      i++;

   char *subString = malloc((dataLen-i)+1);

   if (subString != NULL)
   {
      while ((data[i] != 0x14) && (i<dataLen))
         subString[j++] = data[i++];

      if (i<dataLen)
      {
         subString[j] = '\0';
         printf("%s", subString);
      }
      else
      {
         printf("Delimiters not found");
      }

      free (subString);
   }

答案 2 :(得分:1)

#include <stdio.h>
#include <stdlib.h>


int extractStr(char *out,const char *in, char Delim1, char Delim2){
    int n=0;
    while(*in){
        if(*in==Delim1){                // first delimiter found?
            in++;
            while(in[n] ){

                if(in[n]==Delim2){      // second delimiter found?
                    if(out) out[n]=0;      // null terminate out if provided
                    return n;
                }else{
                    if(out) 
                        out[n]= in[n];  // copy back to out if provided
                }
                n++;
            }
            in+=n;

        }
        in++;
    }
    return 0;
}

int main(){

    char *buff;
    int n;
    char str[]="jksdqsqd sqjhd\bresult\x04qsjhgsdsqs";

    n=extractStr(NULL,str,'\b',0x04);

    if(n){
        buff=malloc(n);
        n=extractStr(buff,str,'\b',0x04);
        printf("'%s'\n",buff);
        free(buff);
    }else
        printf("string not found\n");
    return 0;
}