【发布时间】:2020-08-12 18:18:34
【问题描述】:
我有一个字符数组:
char message[];
还有一个 8 位整数
uint8_t remainder
我想将两者都视为位数组并将它们相减:
message - remainder
并将结果视为 char 数组:
一个例子是
char* message = "ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ";
// Equivalent to a 512-bit array of only 1s
uint8_t remainder = 1;
// Substract here message-remainder
printf("%s", message)
// Output: "ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ"
// As the 512 bit array would still be just 1s except for the first bit which now is 0, so the first char would be 254 instead of 255
有没有可能的方法呢? 我曾考虑将 char 数组转换为 int,但问题是它通常是 64 字节数组,所以我不能将其视为 int。我认为这种方法可以使用按位运算符,但我还没有想出如何减去它们。
有什么建议吗?
【问题讨论】:
-
如果您在问题中添加示例(示例字符数组、余数以及您希望在该示例末尾返回的内容),它可能会帮助人们回答。另外,您说的是“64 字节”数组 - 我只是想确保您的意思是 64 字节而不是 64 位。
-
所以你想把消息当作一个“大”整数? BigNum 库可以为您做到这一点。否则,您减去第一个字符,然后减去每个剩余字符的进位。在 asm 中更容易完成,但可以在 C 的帮助下完成。
-
你也不必按字符来做,只要你小心不要在你的消息数组之外阅读,你可以按“单词”来做。 (将 8 个字符转换为 64 位整数 - 字节序注意,如果余数小于整数减去余数并完成。如果大于,则减去,然后将下一个 8 字节转换为整数并传播进位。继续直到没有进位或没有字符转换)
-
@thisisbenmanley 添加了示例,是的,我的意思是 64 字节。
-
第一次循环,如果余数
标签: c arrays char bit-manipulation bitwise-operators