【发布时间】:2019-02-25 14:55:59
【问题描述】:
直截了当我会说我几乎不知道我在这里做什么 - 我在掌握 C 中的位运算符时遇到了很大的麻烦。作为我的一门课程的练习,我应该隐藏一个数字 ( unsigned int) 在包含数字的大型指针数组 (unsigned char) 中。我正在使用 srand (带有密钥,以便稍后解码)来选择数组的特定元素,然后取我应该隐藏的数字的一位(遍历所有位)并更改数组元素的最低有效位。选择元素。
虽然我得到了一般的想法,但尽管谷歌搜索,但我无法弄清楚位操作。因此,我应该在循环的第 i 次运行(i-th 大小位)中编码 size 并随机选择 current_element 这就是我想出的获取位然后更改元素。
for (i=0; i<32; i++){
tmp = rand() % max;
current_element = array[tmp];
current_element ^= ((size >> i) & 0x01)<<7;
}
要解码,我会类比地写它(其中大小是我试图将解码后的数字写入的 unsigned char):
for (i=0; i<32; i++){
tmp = rand() % max;
current_element = array[tmp];
size = size ^ ((current_pixel.blue<<0)<<7);
}
这两个函数具有不同的功能,srand() 预先在每个函数中重新播种。
但是这些显然不起作用,我什至不知道是哪一个(我只能检查它是否正确解码)。说实话,这些主要是从我在网上找到的其他东西中复制而来的,因为到目前为止我还没有对单个位进行操作。因此,我将不胜感激有关这里出了什么问题的某种建议(而且我知道这里可能一切都错了,而且都是胡言乱语,但我一直在尝试修复它已经有一段时间了,但无济于事)。
【问题讨论】:
-
你的问题太宽泛了,看起来更像是一个家庭作业转储而不是一个真正的问题。如果您不了解按位运算,请隔离问题的特定部分,尽您所能编写代码,展示您的努力,然后人们会非常乐意为您提供帮助。
-
另外,想想位运算符的哪些方面困扰着您,并专门询问这些方面。或者搜索那些——如果你正在寻找特定的东西,你更有可能找到你正在寻找的东西。甚至可以考虑阅读教科书的相关部分并复习课堂笔记。
-
不,这是一个更大的程序的一部分,我正在尝试使用图像中的密钥编写、编码和解码秘密消息 - 不幸的是,我需要了解三件事 - 如何隔离一个特定的位,然后如何更改最后一位,然后在形成时如何将不同的位相加。我没有可以浏览的教科书,因为我没有课本,而且由于我们的讲师并不完全好,他只浏览了这个主题,因此缺乏课堂笔记和讲座。不过,谢谢你,我会尝试更多实验并找出问题所在。
标签: c bit-manipulation bitwise-operators