-1

我的解码器有问题,想知道是否有人可以帮助我?

基本上,我正在尝试为我的隐写编码器构建一个解码器,编码器在声音文件中每个字节的 LSB 上放置一些消息

解码器的工作是收集这些比特并从中创建一条新消息

该代码旨在执行以下操作:

代码:全选

  • 转到消息数组位置。

  • 将 bitindex 设置为 0 直到 7 // (8 位到一个字节)

  • 转到声音阵列位置

  • 如果 soundbit 相等,则将 0 添加到新字节,否则将 1 添加到新字节的末尾

  • 执行一次左移

  • 递增位索引

通过使用各种printf's,我可以告诉你它在崩溃前运行了大约 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");

}

希望有帮助的任何事情都会有所帮助。

4

2 回答 2

1

问题在这里:

char *message[9];

您已经创建了一个由 9 个指向字符的指针组成的数组,您没有为它们分配任何值或为它们分配任何内存。它们未初始化。

您现在要做的第一件事是尊重其中一个未初始化的指针:

*message[mIndex] =

这样你就崩溃了。


编辑:

您可以通过以下方式将其初始化为所有NULLs:

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 

对我来说意味着你真的只追求一个字符串......

于 2012-12-12T16:28:26.417 回答
0

在您发布的代码中,当您到达第一个语句时sIndex将等于。从这里看,您正在阅读数组末尾的. (假设数组的大小实际上是)soundFileSizeifsoundFilesoundFileSize

于 2012-12-12T15:40:25.790 回答