如何将string转换为bytes32类型呢?有谁知道某个神奇的函数或类库可以实现这种转换吗?

例如:如果输入我给定32位,那么这样可以实现。但是如果字符串超过32位,就无法实现转化了。

set_txn_hash = a.transact().set("QmVoGzRDscx61k3RHHkLYaMFtxYZi3ps");#32-bit char

-

function get() returns (stringc value){  
    return list.get_head_data();   
}

但是如果我需要给定更多的字符,比如一个包含48位的字符串,这就无法实现转化。【问题】:我该如何实现呢?

原文链接

3 人回答 0

3 个回答
投票数
最旧发布
最近发布

回答发布于 2018-09-03 15:06:44

目前为止,这个对我来说有效,但不确定是否是最好的方法。如下:

function stringToBytes32(string memory source) returns (bytes32 result) {
    bytes memory tempEmptyStringTest = bytes(source);
    if (tempEmptyStringTest.length == 0) {
        return 0x0;
    }

    assembly {
        result := mload(add(source, 32))
    }
}

还要记住,在solidity中,字符串是遵循UTF8转换格式的,所以在将它们转换为字节后,每个字节不一定是一个字符了。

编著:较短的版本,应该效果一样。

||
||

回答发布于 2018-09-03 15:06:43

string并不等同于bytes32,但是等同于bytes,因为它的长度是动态可变的。

所以你可以使用一个转换bytes B=bytes(S); //S string

例如:

contract string_test {

    function string_tobytes( string s) constant returns (bytes){
        bytes memory b3 = bytes(s);
        return b3;
    }
}

只有使用汇编才有可能将string转换为bytes32

||
||

回答发布于 2018-09-03 15:06:42

请参考下面这个链接。 你可以将字符串转换为bytes32数组。字符串的长度也可以长于32。 链接:https://ethereum.stackexchange.com/a/13388/6353

||
||

回答发布于 2018-09-03 15:06:42

请参考下面这个链接。 你可以将字符串转换为bytes32数组。字符串的长度也可以长于32。 链接:https://ethereum.stackexchange.com/a/13388/6353

||
||

回答发布于 2018-09-03 15:06:43

string并不等同于bytes32,但是等同于bytes,因为它的长度是动态可变的。

所以你可以使用一个转换bytes B=bytes(S); //S string

例如:

contract string_test {

    function string_tobytes( string s) constant returns (bytes){
        bytes memory b3 = bytes(s);
        return b3;
    }
}

只有使用汇编才有可能将string转换为bytes32

||
||

回答发布于 2018-09-03 15:06:44

目前为止,这个对我来说有效,但不确定是否是最好的方法。如下:

function stringToBytes32(string memory source) returns (bytes32 result) {
    bytes memory tempEmptyStringTest = bytes(source);
    if (tempEmptyStringTest.length == 0) {
        return 0x0;
    }

    assembly {
        result := mload(add(source, 32))
    }
}

还要记住,在solidity中,字符串是遵循UTF8转换格式的,所以在将它们转换为字节后,每个字节不一定是一个字符了。

编著:较短的版本,应该效果一样。

||
||

回答发布于 2018-09-03 15:06:44

目前为止,这个对我来说有效,但不确定是否是最好的方法。如下:

function stringToBytes32(string memory source) returns (bytes32 result) {
    bytes memory tempEmptyStringTest = bytes(source);
    if (tempEmptyStringTest.length == 0) {
        return 0x0;
    }

    assembly {
        result := mload(add(source, 32))
    }
}

还要记住,在solidity中,字符串是遵循UTF8转换格式的,所以在将它们转换为字节后,每个字节不一定是一个字符了。

编著:较短的版本,应该效果一样。

||
||

回答发布于 2018-09-03 15:06:43

string并不等同于bytes32,但是等同于bytes,因为它的长度是动态可变的。

所以你可以使用一个转换bytes B=bytes(S); //S string

例如:

contract string_test {

    function string_tobytes( string s) constant returns (bytes){
        bytes memory b3 = bytes(s);
        return b3;
    }
}

只有使用汇编才有可能将string转换为bytes32

||
||

回答发布于 2018-09-03 15:06:42

请参考下面这个链接。 你可以将字符串转换为bytes32数组。字符串的长度也可以长于32。 链接:https://ethereum.stackexchange.com/a/13388/6353

||
||