首页 > 解决方案 > 使用位域压缩字符串

问题描述

我必须对字符串数组进行编码,以便: 1. 编码输出是一个具有最小可能长度的单个字符串 2. 您应该能够稍后解码该字符串。字符串仅由小写字符组成。我不太擅长使用位域。. 当我将字母分配给 enc_string 时,我是否只需右移 3 位?或者我可以使用我创建的结构?另外我怎样才能确保我真正节省了空间。我不能使用 sizeof 因为它以字节为单位返回?

我该如何做位包装。

#include <stdio.h>

typedef struct{
    
    int val:5;
    
}input;

char* encode_string(char **str_arr,int len, int *ret_len){
     
    int i = 0;
    int j = 0;
    int k = 0;
    char *enc_string = (char*)malloc(10*len*sizeof(char));
    for(i=0;i<len;i++){
        for(j=0;j<strlen(str_arr[i]); j++){
            enc_string[k] = str_arr[i][j]; // str_arr[i][j]>>3
            k++;
        }
        enc_string[k++] = '*';
        
    }
    if(k>0){
      enc_string[k]='\0';
      *ret_len = k;
    }
    return enc_string;
    
    
}


int main()
{
    char* str[] = {"abcd","fghi","jkl"};
    char *enc_string;
    int enc_len = 0;
    enc_string = encode_string(str,3,&enc_len);
    printf("Encoded string %s size %d \n",enc_string,enc_len);

    return 0;
}

标签: cdata-structuresbit-manipulationstructurebit-packing

解决方案


推荐阅读