c容易隐藏字符串到文件中出错,求高手解决

c简单隐藏字符串到文件中出错,求高手解决

#include <stdio.h>
///////////////////////////
void hide_info(char *pstring, char *oldname, char *newname)
{
FILE *ofp = fopen(oldname, "rb");
FILE *nfp = fopen(newname, "wb");

char *p = pstring;
int i;
while(*p) {
for(i = 0; i < 8; ++i) {
fputc((0xfe & fgetc(ofp)) + (*p & 0x80), nfp);
*p <<= 1;
}
++p;
}


while(!feof(ofp)) {
fputc(fgetc(ofp), nfp);
}

fclose(ofp);
fclose(nfp);
}
//////////////////////////////
void dis_hiden_info(char *bmpname)
{
FILE *fp = fopen(bmpname, "rb");

char ch;
int i;

do {
ch = 0;
for(i = 0; i < 8; ++i, ch <<= 1)
ch += fgetc(fp) & 0x01;
printf("%c ", ch);
}while(ch);

fclose(fp);
}
/////////////////////////////
int main(void)
{
char oldname[123] = "G:\\cheng.bmp";
char newname[123] = "G:\\123.bmp";
char pstring[123] = "xin jiang";

hide_info(pstring, oldname, newname);
dis_hiden_info(newname);

return 0;
}

不知道问什么不能输出隐藏的字符串,求解决办法
------解决思路----------------------
你hide_info时将原始信息都破坏了还打算怎么还原?

0xfe & fgetc(ofp),获取的原始信息最低bit被清空了,比如这么做了之后'a'和'b'是一样的值