通过修改最低有效位元素来隐藏大指针数组中的数字

问题描述 投票:0回答:1

直接的蝙蝠我会说我几乎不知道我在这里做什么 - 我在C中抓住按位运算符时遇到了很大的麻烦。作为我的一个课程中的练习我应该隐藏一个数字(unsigned int)在包含数字的大指针数组(unsigned char)中。我正在使用srand(使用键,以便我可以稍后解码)来选择数组的特定元素,然后取一个我应该隐藏的数字(迭代所有位)并更改数组元素的最低有效位。选择元素。

虽然我得到了一般的想法,但我不能,尽管谷歌搜索,找出位操作。因此,我应该在循环的第i次运行中编码的sizei-th位大小)和随机选择的current_element这是我想出来获得位然后改变元素。

for (i=0; i<32; i++){    
    tmp = rand() % max;
    current_element = array[tmp];
    current_element ^= ((size >> i)  & 0x01)<<7;
}

为了解码,我会以类比方式编写它(其中大小是擦除无符号字符,我正在尝试将解码后的数字写入):

for (i=0; i<32; i++){
        tmp = rand() % max;
        current_element = array[tmp];
        size = size ^ ((current_pixel.blue<<0)<<7);

    }

这两个具有不同的功能,并且qazxsw poi预先在每个中重新播种。

但这些显然不起作用,我甚至不知道哪一个(我只能检查它是否正确解码)。说实话,这些大部分是从我在网上找到的其他东西中复制的,因为到目前为止我对单个位进行了操作。所以我会对这里的错误提出一些建议(我知道这里可能出现了一切都是错误的,而且一切都是胡乱的,但我一直试图修复它已经有一段时间没有用了)。

c bit-manipulation bitwise-operators
1个回答
2
投票

我只会间接回答你的问题。我将给你一些许多新程序员需要的温和建议。 如果你想学习编程,请停止谷歌搜索和思考。

将问题分解为几个步骤。写伪代码:

srand()

现在,为每个步骤编写C代码。你实际上拥有大部分作品。

  encode:
     for each bit in message_word:
        select random array element
        if bit is set:
           toggle LSB of element.

  decode:
     for each bit in message_word:
        select random element
        if LSB is toggled:
           set bit in message_word

既然你已经达到了基本步骤,也许你可以google // for each bit in message_word for (i=0;i<sizeof(message_word); i++) { // select random array element tmp = rand() % max; current_element = array[tmp]; // if bit is set: if ( bit_is_set(message_word,i) ) { // toggle LSB of element. toggle_lsb(current_element); } } 。但请确保在插入之前了解答案。

"how to toggle a bit"

但是 - 这仍然行不通。为什么?是时候重新思考了。您在随机选择的数组索引处复制了该值。你在副本中切换了一下。对阵列有什么影响?

解决这个问题,至少还有一个挑战。在解码功能中,您将如何实现int bit_is_set(word,bit) { return ((word>>bit)&0x01); } int toggle_lsb(word) { return word ^ 1; } ?你怎么知道一个给定的比特是1还是0?您拥有所需的所有信息。祝好运。

© www.soinside.com 2019 - 2024. All rights reserved.