【问题标题】:Set Least Significant Bit in C在 C 中设置最低有效位
【发布时间】:2013-11-13 16:34:30
【问题描述】:

我用 C 语言编写了一个带有 bmp 图像的简单隐写工具。

我将图像读入内存,并将文本读取到 char bytes[8] 中,一次一个字符。

例如。

a=0d97
bytes[0] = 0
bytes[1] = 1
bytes[2] = 1
bytes[3] = 0
bytes[4] = 0
bytes[5] = 0
bytes[6] = 0
bytes[7] = 1

然后我会去第一个图像字节(char *ptr points它每次)把字节[0]放到LSB,然后是下一个等等。

如果 *ptr=0xff or 0b11111111 我必须将最后一个 1 设置为 0。这可以与

*ptr = *ptr ^ 0x01 ;

但如果 *ptr = 0x000b00000000 异或不起作用,因为 0^1=1

我很困惑如何设置案例。如果 LSB 为 1 或 0,我需要一个操作员每次都将最后一位设为 0,并且不要触及其他位。

【问题讨论】:

    标签: c bit steganography significant-digits


    【解决方案1】:

    1 和 x 的 AND 是 x,而 0 和 x 的 AND 是 0。所以,将它与除最低有效位之外的所有位都设置为 1 的数字进行与:

    *ptr = *ptr & 0xfe;
    

    要将位设置为1,注意0和x的OR是x,而1和x的OR是1:

    *ptr = *ptr | 0x01;
    

    【讨论】:

      【解决方案2】:

      使用此模式将最低有效位设置为位(0 或 1)中的值:

      new_value = old_value & 0xFE | bit
      

      AND 将关闭位 0,如果位为 1,OR 将重新打开。

      【讨论】:

        【解决方案3】:

        您可以使用| 运算符来设置该位。查看相关帖子以查看更多详细信息:How do you set, clear, and toggle a single bit?

        【讨论】:

          【解决方案4】:

          最简单的答案是。 如果您想将数字中的 lsb 设置为零。 如果数字是奇数, 数字=数字-1。 如果是偶数,则在 lsb 处已经为零。

          【讨论】:

          • 这需要测试当前值。 不是最简单的。
          猜你喜欢
          • 1970-01-01
          • 2010-10-19
          • 2015-09-22
          • 2020-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-20
          • 2015-05-09
          相关资源
          最近更新 更多