减去一个char数组减去C中的int

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

我有一个字符数组:

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。我认为该方法可以使用按位运算符解决,但是我还没有弄清楚如何将它们相减。

有什么建议吗?

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

根据要求:

  1. 从字节数组(字符)中读取,作为类型强制转换的整数。请注意,字节序可能会导致它在某些系统上无法正常工作,因此您可能必须进行字节序交换。还请注意,如果数据未与单词边界对齐,则某些系统可能会崩溃。
  2. 比较您的余数与整数。如果整数> =余数,则没有进位,您可以减去这些值并类型转换将整数存储回char数组中。如上所述,同样的例外情况适用。
  3. [如果余数更大,仍然进行减法和存储,然后将1放入余数。
  4. 循环回到1,读入下一个单词,直到您没有进位传播或读完为止。”>
  5. 如果数据是未对齐的,不是字的大小等,则可能需要按字节执行此操作,但是您已经声明不是这种情况。

享受。

((注:强烈建议您使用BigNum类型库,而不要自己动手。总有一天,可能需要移植此代码,并且这种方法很可能在发生这种情况时中断...)


1
投票

首先这样做通常不是一个好主意:-((通常会导致一些缓冲区溢出)

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