Я хочу знать синтаксис для преобразования массива байтов в байты32 в твердости.
Это ответ на вопрос : как хранить открытый ключ в контракте Ethereum?
Я хочу получить PublicKey, хранящийся в виде массива байтов.
Пожалуйста, сообщите мне, как это можно сделать.
Спасибо.
Вот способ извлечь байты32 из массива байтов:
function bytesToBytes32(bytes b, uint offset) private pure returns (bytes32) {
bytes32 out;
for (uint i = 0; i < 32; i++) {
out |= bytes32(b[offset + i] & 0xFF) >> (i * 8);
}
return out;
}
Вы можете использовать bytes32 непосредственно в конструкторе контракта, а затем получить атрибут через геттер :
contract PubKey {
bytes32 pubKey;
function PubKey(bytes32 initKey) {
pubKey = initKey;
}
function getPubKey() constant returns (bytes32) {
return pubKey;
}
}
Кроме того, взгляните на этот вопрос, чтобы узнать подробности преобразования типов в Solidity.
.
bytes memory toBeConvert = "xxxxx";
bytes32 converted;
assembly {
encoded := mload(add(result, 32))
}
Если вы хотите только сделать преобразование, попробуйте это. Но не забудьте добавить требования в рабочую среду.
Вы можете нарезать данные, если они находятся в calldata:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract Slice {
function bytesToBytes32(bytes calldata b) external pure returns (bytes32) {
return bytes32(b[:32]);
}
}
фетт
пкоч
0
.муджен
Билл Бердик