C 有人帮我解决这个问题吗
我的解码器有问题,不知是否有人能帮我解决 基本上,我正在尝试为我的隐写术编码器构建一个解码器,编码器将消息中的一个位放在声音文件中每个字节的LSB上 解码器的任务是收集这些比特并从中创建新消息 该代码旨在执行以下操作: 代码:全选C 有人帮我解决这个问题吗,c,steganography,C,Steganography,我的解码器有问题,不知是否有人能帮我解决 基本上,我正在尝试为我的隐写术编码器构建一个解码器,编码器将消息中的一个位放在声音文件中每个字节的LSB上 解码器的任务是收集这些比特并从中创建新消息 该代码旨在执行以下操作: 代码:全选 转到消息数组位置 将bitindex设置为0,增量为7/(8位为一个字节) 转到声音阵列位置 如果soundbit等于0,则将0添加到新字节,否则将1添加到新字节的末尾 新字节 执行一次位向左移位 增量指数 通过使用各种printf,我可以告诉您,它在崩溃前平稳运
- 转到消息数组位置
- 将bitindex设置为0,增量为7/(8位为一个字节)
- 转到声音阵列位置
- 如果soundbit等于0,则将0添加到新字节,否则将1添加到新字节的末尾 新字节
- 执行一次位向左移位
- 增量指数
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");
}
{
int mIndex、sIndex、bitIndex、mask;
字符*消息[9];
掩码=1;
mIndex=0;
unsigned char*soundFile=LoadWavAudioFile(“boomedit.wav”);
int soundFileSize=GetSizeOfWavFile();
bitIndex=0;
for(mIndex=0;mIndex<8;mIndex++)//消息索引
{
printf(“1\n”);
for(sIndex=0;sIndex0)//消息位是否大于0
{
printf(“+++++++++++++++++++++\n”);
*message[mIndex]=(声音文件[sIndex]| 1);//在消息字节中添加一个
*message[mIndex]=*message[mIndex]在您发布的代码中,sIndex
在您到达第一个if
语句时将等于soundFileSize
。从这里看,您好像在读取数组末尾的一个,soundFile
(假设数组的大小实际上是soundFileSize
)问题在于:
char *message[9];
您已经创建了一个9个指向字符的指针数组,您没有给它们分配任何值或分配任何内存。它们是未初始化的
您现在要做的第一件事是遵从其中一个未初始化的指针:
*message[mIndex] =
所以你崩溃了
编辑:
您可以通过以下方式将其初始化为所有NULL
s:
char *message[9] = {0};
但您仍然不能使用它,因为它只会在延迟空指针时出错。您必须为这些指针分配一些内存以使其有用。例如,您可以执行以下操作:
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
对我来说,这意味着您实际上只需要一个字符串…哪一行有错误?如何声明和初始化消息和声音文件?(发布代码时不要使用制表符,而是使用4个空格)缺少开括号({
)对于sIndex for循环。这是一个输入错误吗?您也…从未使用过bitIndex?我认为缺少括号是一个输入错误。在将位添加到我的新消息数组时,它会出错。for(sIndex=0;sIndex
=>wat?当我为消息分配位时,SEGFULT从该区域开始。我不明白哪里出了问题,尽管它看起来很好,嗯,你说它的读数超过声音文件的末尾是什么意思。基本上,我使用我的老师提供的函数查找声音文件的大小2分钟让我看看,然后我会发消息e backI通过char*message[9]={}对数组进行初始化,但它仍然存在crashes@Babbleshack-这是因为它们还没有初始化。请参阅我的编辑。我的任务是在声音文件中隐藏一条消息,然后检索同一条消息,我可以使用for循环初始化数组中的所有单元格吗?正如您所知,我没有这么久。@Babbleshack-当然,只需更改增量即可将一部分添加到for循环的计数器,这就是它的全部内容。