/编辑:感谢目前为止的帮助,但是我没有任何解决方案来获取样本输入并提供样本输出。我的描述并不是最清楚,抱歉。
我有一个由二进制数据组成的数组。我想要做的是确定每个不间断的1或0段的长度。
说我有这些数据:
0111010001110
在我需要翻译成的数组binaryArray
中:
0100110
存储在nwArray
中,其中0
表示窄(长度小于3位),1
表示宽(> 3位长)。我不关心二进制值,而是关注每个组件的长度。我不确定这种解释是否有意义。
这就是我所拥有的;它不起作用,我明白为什么,但我想不出一个好的解决方案。
for(x=0;x<1000;x++){
if(binaryArray[x]==binaryArray[x+1]){
count++;
if(count>=3){
nwArray[y]=1;
y++;
count=0;
}
}else{
if(barcodeArray[x]){
nwArray[y]=0;
}
}
}
答案 0 :(得分:5)
这样做吗?
int count = 0;
for (x=0; x<1000;x++)
{
if (binaryArray[x] != binaryArray[x+1])
{
if (count < 3)
nwArray[y]=0;
else
nwArray[y]=1;
y++;
count = 0;
}
else
count++;
}
答案 1 :(得分:3)
你遇到的一个问题是你过早地将计数与3进行比较。等到你看到比特流发生了变化。尝试一下while循环,直到该位翻转然后比较计数。
答案 2 :(得分:0)
修改后的@MikeW's answer:
int count = 0;
int nwSize = 0;
const int ilast = SIZEOF(binaryArray) - 1;
for (int i = 0; i <= ilast; ++i)
if (i == ilast || binaryArray[i] != binaryArray[i+1]) {
nwArray[nwSize++] = (count > 1); /* true for '1110'; false for '110' */
count = 0;
}
else
++count;
assert(count == 0);