如何修改数组?

时间:2012-12-12 11:39:54

标签: c arrays steganography

我目前正在尝试使用一些.wav文件进行隐写术。

我想要做的是编写一个程序,将声音文件打开成一个数组,然后修改所述数组,但这就是我被卡住的地方。

目前我有:

#include <stdio.h>
#include "scc110wav.h"

int main ()
{
    unsigned char *soundData = LoadWavAudioFile("3stepoct.wav");

    int byte;

    for (byte = 0; byte <= 5554944; byte++){
        printf("%d\n", soundData[byte]);
    }
}

目前我所能做的就是打印数组,但无法更改数组的值。我知道我不需要在最后的东西中打印数组,特别是因为它太大了,但我只是想了解一下这个文件,以便我可以将数组值更改为ASCII值,而无需监听检测声音的大部分变化。

3 个答案:

答案 0 :(得分:3)

soundData不是const,因此您可以使用[]运算符访问流的字节,并使用此数据执行任何操作。

答案 1 :(得分:1)

根据我的理解,您在需要更改的地方感到困惑,因此可以播放wav文件。 如果这是问题,您可以从以下链接

了解有关波形文件格式的所有信息

Click here to learn Wave file format

您可以通过保留有关块大小等的其他详细信息来更改数据部分。

答案 2 :(得分:0)

使用soundData[byte]说明符在for循环中打印%d时,您将打印soundData[byte]中存储的字符的ASCII值。所以,你可以在任何时候轻松访问和修改soundData[byte]中存储的数据,就像使用普通数组一样。除了它unsigned char *之外,所以没有什么可以阻止你修改数组中的任何内容。

您可能需要考虑将byte的数据类型从int更改为long long,因为5554944循环中使用的for超出了{int 1}}最大存储值限制。所以,基本上你会一遍又一遍地滚动。

一旦你理解了如何访问音频文件中的数据,你应该真正看到的是在你的输入流上实现的一个好的隐写算法。最简单的算法就是基于LSB的算法。