我只是想知道是否有人能帮助我设置/清除音频样本的LSB
下面的代码通过一个包含24个元素的数组,每个元素都添加到文件中,后面跟着一个新行。
FILE *fp;
fp = fopen(EmbedFile, "w");
for (int i = 0; i < 24; i++){
fprintf(fp, "%d\n", Bits[i]);
}
fclose(fp);
当我打开文件时,所有内容都按照我希望的方式编写。
我要做的是,读取该行并比较该值,如果它是0清除音频样本的LSB,否则将其设置为1,代码如下:
FILE *embedfile = fopen(EmbedFile, "r");
int line = 0;
char input[12];
char *zero = "0";
char *one = "1";
while (fgets(input, 12, embedfile))
{
//duplicates the key sample prior to lsb modification
outputFrames[frame] = inputFrames[frame];
//sets the lsb of the audio sample to match the current line being read from the text file.
if (strcmp(input, zero) == 0)
{
//clear the LSB
outputFrames[frame] &= ~1;
printf("%u bit inserted\n", outputFrames[frame] &= ~1);
}
else
{
//set the LSB
outputFrames[frame] |= 1;
printf("%u bit inserted\n", outputFrames[frame] |= 1);
}
//next frame
frame++;
}
打印输出没有显示我认为他们会想到的,而是我得到的:
1 bit inserted
1 bit inserted
4294967295 bit inserted
4294967295 bit inserted
1 bit inserted
3 bit inserted
1 bit inserted
.txt文件以这些值开头,因此如果我正确地执行了条件,则打印输出应该匹配它们。
0
0
1
0
0
0
1
如果有人能够指出我哪里出错了,我会真的很感激,我只是不知道为什么输出不是我所期望的。
由于
答案 0 :(得分:0)
再多看一眼后,我发现了我的代码问题。
FILE *fp;
fp = fopen(EmbedFile, "w");
for (int i = 0; i < 24; i++){
fprintf(fp, "%d\n", Bits[i]);
}
fclose(fp);
我甚至在我的原始帖子中提到每次插入后都会有一个新行。
然而,我要比较的人不要考虑这些新行。
char *zero = "0";
char *one = "1";
将它们更改为下面的代码后,输出现在正确。
char *zero = "0\n";
char *one = "1\n";
@undwind 感谢您的建议,看了之后,您的方式更有意义。
谢谢。