Javascript 如何增加总字节数组的值

Javascript 如何增加总字节数组的值,javascript,bytearray,Javascript,Bytearray,我知道这是一个noob问题,但出于好奇还是想问。 我有一个3字节的字节数组,例如[00,00,00]。每次迭代一个方法时,我都会将最后一个方法增加0x02次。现在,当最后一个字节达到阈值FF时,我需要将最后一个字节增加到+1,同时增加最后一个字节。例如,对于字节数组值[00,00,FF]用0x02增加它应该变成[00,01,02],最后它应该达到[FF,FF,FF]理想的方法应该是什么,而不是使用正常的if条件。您尝试过For循环和if条件吗 你在你的元素中循环。如果元素小于0xFF,则将其递增

我知道这是一个noob问题,但出于好奇还是想问。
我有一个3字节的字节数组,例如
[00,00,00]
。每次迭代一个方法时,我都会将最后一个方法增加
0x02
次。现在,当最后一个字节达到阈值
FF
时,我需要将最后一个字节增加到+1,同时增加最后一个字节。例如,对于字节数组值
[00,00,FF]
0x02
增加它应该变成
[00,01,02]
,最后它应该达到
[FF,FF,FF]
理想的方法应该是什么,而不是使用正常的if条件。

您尝试过For循环和if条件吗

你在你的元素中循环。如果元素小于
0xFF
,则将其递增,然后返回。否则,将其设置为
0x00
,让for循环进一步循环

伪代码:

for element in array (in reverse order):
  if(element == 0xFF):
    element = 0
  else:
    element += 0x02
    return array
编辑(转储嵌套循环)

对于更通用的方法(显然不是使用颜色),您应该尝试如下级联增量:

// non-destructive increment of the arr
// [0xFF, 0x00] -> [0x00, 0x02]
function incremented(arr) {
  var value, 
      index = 0,
      increment = 0x02,
      threshold = 0xFF, 
      re = [],
      flip = true;
  for (var i = 0; i < arr.length; i++) {
    value = arr[i];
    if (flip === false) {
      // don't touch, just add it
      re.push(value);
    } else if (value + increment > threshold) {
      // add zero value, but keep on flipping
      re.push(0);
    } else {
      // add incremented value
      re.push(value + increment);
    }
  }
  if (flip) {
    // if even the last number did not stop flipping add another
    re.push(increment);
  }
  return re;
}
//arr的非破坏性增量
//[0xFF,0x00]->[0x00,0x02]
函数递增(arr){
var值,
指数=0,
增量=0x02,
阈值=0xFF,
re=[],
翻转=真;
对于(变量i=0;i阈值){
//添加零值,但继续翻转
再推(0);
}否则{
//增加递增的值
再推(值+增量);
}
}
如果(翻转){
//如果连最后一个数字都没有停止翻转,请再添加一个
再推(增量);
}
返回re;
}

您应该只使用一个变量

var i=0; // from 0 to 4096

//every time you can increment i++;

where you want result just convert i to array like :
function convert_array(val){
  var val2 = parseInt(val/4096, 16);
  var val1 = parseInt(val2/256, 16);
  var val0 = parseInt(val2%256, 16);
  return [val2 , val1, val0];
}


var result = convert_array(i); 
优点:

  • 要增加数字没有问题,只需i++
  • 您没有循环(用于):)

  • 为什么使用十六进制自动意味着使用颜色?不一定是颜色,只是说看起来是的,我有长度大于8的bytearray的要求。@ravoorinandan这个评论让你的问题不清楚,请您编辑一下,解释一下您实际要做的事情好吗?@Tharabas您似乎在以错误的顺序递增字节0x02从何而来?通常从
    00,00开始,FF
    by+2将导致
    00,01,01
    ,而不是
    00,01,00
    ,抱歉,这是一个打字错误。谢谢你的修正。当它达到极限时,应该重置回零吗?[顺便说一句,这个问题仍然是错的]现在还不清楚你在问什么。您的要求看起来像是将一个大的多字节整数表示为许多单个字节,但您的示例与此不完全一致。@ravoorinandan:接近结尾时,它将是
    00,00,FE
    0x02
    增量将使其成为
    00,01,00
    。最后一种情况是
    FE,FE,FE