Solidity

不正確的 bytes32 到字元串的轉換

  • November 8, 2019

我的solidity 函式正在返回一個bytes32[]我正在循環Javascript並轉換為stringusingweb3.toAscii()的 . 在控制台中列印它會在末尾顯示額外的字元,如下所示

在此處輸入圖像描述

返回 bytes32 的函式

function myBets() public view returns (uint[] memory, bytes32[] memory, bytes32[] memory, int[] memory){
   uint n = betterCacheData[msg.sender].length;

   uint[] memory betValues = new uint[](n);
   bytes32[] memory options = new bytes32[](n);
   bytes32[] memory winStatus = new bytes32[](n);
   int[] memory moneyLineValues = new int[](n);

   for(uint i=0; i<n; i++){
       uint betId = betterCacheData[msg.sender][i].betId;
       uint optionId = betterCacheData[msg.sender][i].optionId;

       betValues[i] = betterCacheData[msg.sender][i].betValue;
       options[i] = bets[betId].moneyLineData[optionId].option;

       if(bets[betId].betStatus == BetStatus.Open || bets[betId].betStatus == BetStatus.Closed){
           winStatus[i] = "pending";
       } else{
           if(bets[betId].correctChoice == optionId){
               winStatus[i] = "won";
               moneyLineValues[i] = bets[betId].moneyLineData[optionId].value;
           } else{
               winStatus[i] = "lost";
           }
       }
   }
   return (betValues, options, winStatus, moneyLineValues);
}

任何幫助將不勝感激!謝謝!

我使用byte32十六進製到字元串轉換器網站將這些值轉換為字元串。該網站還顯示這些奇怪的字元。

原始 byte32 值

然後我嘗試剝離之前的所有字元,包括所有字元x0's現在我得到了所需的輸出

修改後的 byte32 值

然後我嘗試傳遞776feweb3.toAscii()獲得所需的輸出。

TLDR 改用web3.toUtf8()_

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