我的解码器出现问题,想知道是否有人可以帮助我?
基本上,我正在尝试为我的隐写编码器构建解码器,编码器在声音文件中的每个字节的LSB上放置一个消息
解码器作业是收集这些位并从中创建新消息
代码意味着执行以下操作:
代码:全部选择
转到消息数组位置。
将bitindex设置为0,增量为7 //(8位到一个字节)
转到声音阵列位置
如果soundbit相等则将0添加到新字节,否则添加1到结尾 新字节
执行bitshift一次
增加bitindex
通过使用各种printf
,我可以告诉你它在崩溃前平稳运行3/4次。
希望有意义的实际循环看起来像这样:
{
int mIndex, sIndex, bitIndex, mask;
char *message[9];
mask = 1;
mIndex = 0;
unsigned char *soundFile = LoadWavAudioFile("boomedit.wav");
int soundFileSize = GetSizeOfWavFile();
bitIndex = 0;
for(mIndex = 0; mIndex < 8; mIndex++)//index for message
{
printf("1\n");
for(sIndex = 0; sIndex < soundFileSize; sIndex++)//index for soundfile
{
printf("2\n");
for(bitIndex = 0; bitIndex < 8;)
{
printf("3\n");
int test;
if((soundFile[sIndex] & mask) > 0)//is message bit > 0
{
printf("++++++++++++++++\n");
*message[mIndex] = (soundFile[sIndex] | 1);//adds a one to message byte
*message[mIndex] = *message[mIndex] <<1; //shift bits 1 placce left
printf("*****************\n");
}
else
{ //no change the LSB to 0
printf("------------------\n");
*message[mIndex]= soundFile[sIndex] & 254; //adds a zero at end o
*message[mIndex] = *message[mIndex] <<1; //shifts bits 1 place to left
printf("******************\n");
}
bitIndex++;
}
}
}
printf("\n hiddden letters:%s\n", *message); //print message
printf("\nalert 5\n");
}
希望有助于任何事情有所帮助。
答案 0 :(得分:1)
问题在于:
char *message[9];
你已经创建了一个包含9个字符指针的数组,你没有为它们分配任何值或者为它们分配任何内存。他们没有初始化。
你现在要做的第一件事就是尊重其中一条未初始化的指针:
*message[mIndex] =
因此你崩溃了。
编辑:
您可以通过以下方式将其初始化为所有NULL
:
char *message[9] = {0};
但你还是不能使用它,不会只是在引用NULL指针时出错。您必须为这些内容分配一些内存才有用..例如,您可以这样做:
message[0] = malloc(100); // I don't know how much you need for your strings
message[1] = malloc(100); // that's up to you, so I'm just arbitrally picking 100 bytes
message[2] = malloc(100); // here to illustrate the point.
message[3] = malloc(100);
message[4] = malloc(100);
message[5] = malloc(100);
message[6] = malloc(100);
message[7] = malloc(100);
message[8] = malloc(100);
然后,当你完成后,你将不得不释放它们。这是想要你想要的吗?一串字符串?
这一行:
printf("\n hiddden letters:%s\n", *message); //print message
对我来说意味着你真的只追求一个字符串......
答案 1 :(得分:0)
在您发布的代码中,当您转到第一个sIndex
语句时,soundFileSize
将等于if
。从这里看,就像你正在阅读一个超过数组结尾的soundFile
。 (假设数组的大小实际上是soundFileSize
)