Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c字节数组中按倍数计数_C - Fatal编程技术网

在c字节数组中按倍数计数

在c字节数组中按倍数计数,c,C,我试图降低二维条码中RGB像素的信息密度,以便进行扫描 我目前有一个3字节的数组,其中信息以绑定的倍数编码,直到命中256,在这一点上它将循环到下一个字节;例如,如果bound为60: 0,0,0 -> 60,0,0 -> 120,0,0 -> 180,0,0 -> 240,0,0 -> (loop over) 0,60,0 -> ... 我怀疑有一种非常简单的方法可以做到这一点,但我只能通过for循环实现这一点 void multiples(u

我试图降低二维条码中RGB像素的信息密度,以便进行扫描

我目前有一个3字节的数组,其中信息以
绑定的倍数编码,直到命中256,在这一点上它将循环到下一个字节;例如,如果
bound
为60:

      0,0,0 -> 60,0,0 -> 120,0,0 -> 180,0,0 -> 240,0,0 -> (loop over) 0,60,0 -> ...
我怀疑有一种非常简单的方法可以做到这一点,但我只能通过for循环实现这一点

void multiples(uint32_t data){
  uint32_t a[3] = {0, 0, 0};
  uint8_t bound = 32;

  for(int i = 0; i < data; i++){
    a[0] += bound;
    a[1] += bound*(a[0] - a[0]%256)/256;
    a[2] += bound*(a[1] - a[1]%256)/256;

    a[0] %= 256;
    a[1] %= 256;
  }

  printf("%u,%u,%u\n",a[0],a[1],a[2]);
}
void倍数(uint32\t数据){
uint32_t a[3]={0,0,0};
uint8_t界=32;
对于(int i=0;i

如何以最佳方式完成此操作?

您的示例与代码和解释不匹配。但是假设你的代码是正确的,我认为我们可以优化它。由于您不断向
a[0]
添加
bound
,因此
a[0]
(例如,
acc[0]
)的累积值将为

因此,
a[0]
可以直接计算为
acc[0]%256
。现在,每当
acc[0]
跨越256的倍数时,
a[1]
的累积值将添加
bound
。所以,

acc[1] = (acc[0]/256)*bound
因此,
a[1]
将是
acc[1]%256
。累积
a[2]
同样是
acc[1]
与256的倍数相交的次数

acc[2] = (acc[1]/256)*bound

我认为要求必须是
a[2]
才能小于256,因此
a[2]
应该是
acc[2]%256
。但是您可以保持它与代码中的
acc[2]
相等。

240,0,0
0,20,0
您应用了哪条规则?为什么
0,20
?根据你的代码
a[0]
应该是44,
a[1]
,60紧跟在
240,0,0
之后,直到达到256为止,在这一点上它将循环
如果256是最大值,而你是240,你加上60,然后循环,那么你应该有
0,44,0
而不是
0,20,0
是的,我的错,那是个打字错误。我本来是用20块来演示的,但觉得时间太长了,所以我换成了60块。我一定忘了更改它。我只是注意到,这在我自己的代码中可能也是一个问题,当给定一个60的界,5作为一个值时,您的代码返回
44,60,0
,而不是
0,60,0
。是的,对于您尝试执行的操作,我也感到困惑。所以我开始优化你的代码。我仍然不理解问题陈述。也许你可以说得更清楚些。但我仍然认为答案应该是这样的。你是对的,再一次,为打字错误感到抱歉。你的代码确实有效;最后,我用一个
uint8\u t
等于
bound*(256/bound)
的值替换掉了256。非常感谢。
acc[2] = (acc[1]/256)*bound