Solidity中固定大小字节数组转string

in #solidity7 years ago

string本身是一个特殊的动态字节数组,所以它只能和bytes之间进行转换,不能和固定大小字节数组进行直接转换,如果是固定字节大小数组,需要将其转换为动态字节大小数组才能进行转换。

``
pragma solidity ^0.4.4;

contract C {

function bytes32ToString(bytes32 x) constant returns (string) {
    bytes memory bytesString = new bytes(32);
    uint charCount = 0;
    for (uint j = 0; j < 32; j++) {
        byte char = byte(bytes32(uint(x) * 2 ** (8 * j)));
        if (char != 0) {
            bytesString[charCount] = char;
            charCount++;
        }
    }
    bytes memory bytesStringTrimmed = new bytes(charCount);
    for (j = 0; j < charCount; j++) {
        bytesStringTrimmed[j] = bytesString[j];
    }
    return string(bytesStringTrimmed);
}

function bytes32ArrayToString(bytes32[] data) constant returns (string) {
    bytes memory bytesString = new bytes(data.length * 32);
    uint urlLength;
    for (uint i = 0; i< data.length; i++) {
        for (uint j = 0; j < 32; j++) {
            byte char = byte(bytes32(uint(data[i]) * 2 ** (8 * j)));
            if (char != 0) {
                bytesString[urlLength] = char;
                urlLength += 1;
            }
        }
    }
    bytes memory bytesStringTrimmed = new bytes(urlLength);
    for (i = 0; i < urlLength; i++) {
        bytesStringTrimmed[i] = bytesString[i];
    }
    return string(bytesStringTrimmed);
}    

}
``

Sort:  

Attention!! don't click on the link eat a phishing site

thank you very much


DO NOT FOLLOW any instruction and DO NOT CLICK on any link in the comment!

Please consider to upvote this warning if you find my work to protect you and the platform valuable. Your support is welcome!WARNING - The message you received from @sokolova is a CONFIRMED SCAM! For more information, read this post: https://steemit.com/steemit/@arcange/phishing-site-reported-upvoteme-dot-ml