Framework 中 ByteArray 有Bug


--- Write a encoded char array into buf
function ByteArray:writeBuf(__s)
    for i=1,#__s do
        self:writeRawByte(__s:sub(i))
    end
    return self
end

上面方法中应该修改成


--- Write a encoded char array into buf
function ByteArray:writeBuf(__s)
    for i=1,#__s do
        self:writeRawByte(__s:sub(i, i))
    end
    return self
end

这里应该是按照字节写入的 但是__s:sub(i) 获取的是已i为起始位置的子字符串。

错误发现


local buf = cc.utils.ByteArrayVarint.new(cc.utils.ByteArrayVarint.ENDIAN_BIG)
buf:writeInt(34)
printInfo("buf all bytes: %s, %d", cc.utils.ByteArray.toString(buf:getBytes(), 16), (buf:getLen()))


  buf all bytes: 00 00 00 22 00 00 22 00 22 22 , 4

无论我怎样测试,都达不到你的输出。例如:

function MainScene:_onTest2()
    print("test2")
    local ba = ByteArrayVarint.new(ByteArrayVarint.ENDIAN_BIG)
        :writeInt(34)
    print(ba:toString(), ba:getLen())
    print(string.format("buf all bytes:%s, %d", 
        ByteArray.toString(ba:getBytes(), 16), 
        ba:getLen()))
end


```


得到的结果是:


```
Cocos2d:  test2
Cocos2d:  00 00 00 22   4
Cocos2d:  buf all bytes:00 00 00 22 , 4
```


其实,在 writeRawByte中是有判断的:

function ByteArray:writeRawByte(__rawByte)
    if self._pos > #self._buf+1 then
        for i=#self._buf+1,self._pos-1 do
            self._buf* = string.char(0)
        end
    end
    self._buf = string.sub(__rawByte, 1,1)
    self._pos = self._pos + 1
    return self
end


```


在真实的写入中,使用的是  


```
string.sub(__rawByte, 1,1)
```



但是,你是对的。我依然按照你的建议做了修改。*

这么深的帖子你都挖出来了。。。。。

5月28时候的quick 版本没有修复这个bug 这个bug 只在你自己的github 上修改了

恩,你说对了。

看了一下触控上的源码,确实还是老版本的。

ByteArray我提交到quick后https://github.com/zrong/quick-cocos2d-x/commits/zrong/framework/cc/utils/ByteArray.lua,这两次都没有同步到quick。

不过这帖子并非挖出来的,而是我一直存在bookmark里面的,最近才有时间一条条来看。

请问改下bytearray的编码,比如在写字符串的用gb2312