Как преобразовать строку в bytes32?

Как преобразовать строку 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-битную строку, это не сработает. [Q] Как я могу сделать эту работу?

16 голосов | спросил alper 9 +03002016-10-09T19:01:32+03:00312016bEurope/MoscowSun, 09 Oct 2016 19:01:32 +0300 2016, 19:01:32

3 ответа


27

Это работало для меня до сих пор. Не уверен, что это лучший способ.

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))
    }
}

Также помните, что строками в прочности являются UTF8, поэтому после преобразования их в байты каждый байт не обязательно является символом.

EDIT: более короткая версия, должна работать одинаково.

ответил Grzegorz Kapkowski 10 +03002016-10-10T09:37:16+03:00312016bEurope/MoscowMon, 10 Oct 2016 09:37:16 +0300 2016, 09:37:16
11

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 возможно только с помощью сборки

ответил Badr Bellaj 9 +03002016-10-09T20:11:54+03:00312016bEurope/MoscowSun, 09 Oct 2016 20:11:54 +0300 2016, 20:11:54
-1

Просьба указать это. Вы можете преобразовать строку в массив bytes32. Длина строки может быть больше 32.

https://ethereum.stackexchange.com/a/13388/6353

ответил 黃智祥 22 MaramWed, 22 Mar 2017 07:32:47 +03002017-03-22T07:32:47+03:0007 2017, 07:32:47

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132