Solidity

將 8x8 棋盤遊戲轉換為字節

  • August 13, 2017

我試圖通過將游戲的 8x8 板儲存為二進制值來節省記憶體,但遇到了麻煩:

棋盤上的每個方格可以是10(黑)、11(白)或00(空),共有 64 個方格。那是 128 個二進制數字,所以這應該是 16 個字節 (128/8) 對吧?

我該如何處理呢?我會說bytes16 foo = 0b10111000...嗎?

有人有直接使用solidity字節的連結或建議嗎?

最終我想將它們用作映射中的鍵……

所以 BigNumber 具有非常有用的基本更改操作。對於任何人來說,這可能對我所做的有幫助:

var board = 'bbbbbbbbbbbbbbbbwbbwbwbbbbwwwwbbbbbbbbbbwbwwbwbww-bbbbwwwwwwwwww' boardConverted (board) { return board && '0b' + (board.match(/.{1,1}/g).map((spot) => { return spot === 'b' ? '11' : (spot === 'w' ? '10' : '00') }).join('')) } bin2hex (val) { if (!val) return var foo = new web3.BigNumber(val, 2) return foo.toString(16) } hex2bin (val) { if (!val) return var foo = new web3.BigNumber(val, 16) return foo.toString(2) } var hex = bin2hex(boardConvert(board)) var backToBin = hex2bin(hex)

引用自:https://ethereum.stackexchange.com/questions/24228