记一次把聊天表情包转成文件再还原的故事
Posted yinkw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次把聊天表情包转成文件再还原的故事相关的知识,希望对你有一定的参考价值。
第一步转成txt: xxd xxx.gif
第二步txt文件转移到自己电脑, 略
第三步加工txt文件, 只需要中间这些二进制。 由于mac不支持grep -P命令, 改用awk命令;
由于mac下sed ‘:label;N;s/\\n/:/;t label‘ 运行结果不符合预期,改用awk命令。
tail -n2 dumpling-for-you.txt|awk ‘for(i=2;i<NF&&i<=9;i++) print $i‘|awk -v RS="" ‘gsub("\\n","");print‘
第四步开始转换!!! 编码风格诡异, 请轻拍~~
#include <iostream> #include <fstream> #include <stdio.h> int main() FILE * in; FILE * out; if((in = fopen("xxx.hex", "rb"))==NULL) printf("打开输入文件失败\\n"); return -1; if((out = fopen("yyy.gif","wb"))==NULL) printf("打开输出文件失败\\n"); return -1; // fseek(in,0,SET_SEEK); // fseek(out,0,SEEK_END); // printf("移动到文件头\\n"); char * buf=(char *)malloc(2); rewind(out); int dec_val; char dec_vals[100]; int dec_index=0; int count=0; while((fgets(buf,2,in))!=NULL && count++>=0) dec_val = strtol(buf, NULL, 16); // decimal dec_vals[dec_index]=dec_val*16; if((fgets(buf,2,in)!=NULL))// 读第二个8字节 dec_val = strtol(buf, NULL, 16); // decimal dec_vals[dec_index]+=dec_val; else break; dec_index++; if(dec_index==100) printf("before fwrite, pos=%ld\\n", ftell(out)); fseek(out, 0, SEEK_END); fwrite(dec_vals, 1, dec_index, out); dec_index=0; printf("after fwrite, pos=%ld\\n", ftell(out)); fwrite(dec_vals, 1, dec_index, out); fclose(in); fclose(out); return 1;
第五步把得到的gif添加到微信表情,然后四处炫耀
小节:
1. mac上没有gdb,强行安装的gdb也非常难用,可以使用lldb
2. mac对grep、sed命令的支持与linux有些出入
以上是关于记一次把聊天表情包转成文件再还原的故事的主要内容,如果未能解决你的问题,请参考以下文章