string ss = richTextBox1.Text;
                    char[] ch = new char[(ss.Length + 2) * 16];  //数组大小为什么这么大
                    for (int i = 0; i < ss.Length; i++)
                    {
                        ch[i] = Convert.ToChar(ss[i]);
                    }
                   char[] temp = new char[(ss.Length + 2) * 16];
                    int m, n;
                    for (n = 0; n < 16; n++)
                        temp[n] = Convert.ToChar(0x0001 & '#' >> n);
                    for (m = 1; m < ss.Length + 1; m++)
                        for (n = 0; n < 16; n++)
                            temp[16 * m + n] = Convert.ToChar(0x0001 & ch[m - 1] >> n);                    for (n = 0; n < 16; n++)
                        temp[16 * m + n] = Convert.ToChar(0x0001 & '#' >> n);ch那个数组的大小为什么是那么大? 0x0001 & '#' >> n 语句不明白,希望解释下。还有就是连续几个for语句的逻辑原因为什么这样循环。谢谢各位大侠了~  

解决方案 »

  1.   

    0x0001 & '#' >> n
    '#'的二进制值右移n位,然后和0x0001的二进制值按位与
      

  2.   

    lsb不熟,网上似乎有不少代码,   char[] ch = new char[(ss.Length + 2) * 16];  //数组大小为什么这么大 
                        for (int i = 0; i < ss.Length; i++) 
                        { 
                            ch[i] = Convert.ToChar(ss[i]); 
                        } 
    估计是写的人写错了吧,没必要这么大,要么在其他地方用到了ch 数组的ss.Length以外的元素?
      

  3.   

    一直观注这段程序的意义。是有关数字水印算法的? 楼主用到的“LSB”是指的最低有效位的简称吗?那样就容易理解定义一个16倍的大数组的意义了。就是把少量保密信息通过程序分散在这个16倍的大容器中。如果LSB是别的意思,另当别论。
      

  4.   

    嗯 就是最低位隐藏数据算法 大侠能具体解释下这段代码吗 为什么要ss.lenght+2 还有0x0001 & '#' >> n 是干嘛用的 里面的#符号是作甚 还有几个for语句没法理解 模模糊糊的感觉 望大哥详解 在此谢谢了