Как я могу упаковать и получить доступ к нескольким значениям uint8 в один большой uint?

В настоящее время у меня есть ситуация, когда у меня есть такие переменные:

uint8 _variable1 = 4;
uint8 _variable2 = 2;
uint8 _variable3 = 99;
uint8 _variable4 = 1;
uint8 _variable5 = 0;
uint8 _variable6 = 2;
uint8 _variable7 = 1;
uint8 _variable8 = 34;

Когда мне нужно передать или вернуть эти значения (поскольку Solidity не сообщает Structs как параметры или возвращаемые значения), я продолжаю сталкиваться с этой проблемой:

CompilerError: Stack too deep, try removing local variables.

Использование функции для извлечения этих значений выглядит следующим образом:

uint8 _variable1;
uint8 _variable2;
uint8 _variable3;
uint8 _variable4;
uint8 _variable5;
uint8 _variable6;
uint8 _variable7;
uint8 _variable8;

(_variable1, _variable2, _variable3, _variable4, _variable5, _variable6) = dataContract.getData(_id);

Вместо этого я хотел бы сохранить одну переменную, такую ​​как uint64 data = 0402990100020134

Как бы я правильно определил это в целостности?

Если бы я хотел получить значение переменной 6, как бы я это сделал?

3 голоса | спросил Nanolucas 31 Jpm1000000pmWed, 31 Jan 2018 13:47:36 +030018 2018, 13:47:36

1 ответ


2

Вы можете использовать операторы сдвига битов для упаковки данных из меньших целых чисел в более крупные.

например.

uint8 a = 1, b = 2;
uint16 foo = (b << 16) | a;
ответил Mikko Ohtamaa 31 Jpm1000000pmWed, 31 Jan 2018 15:31:33 +030018 2018, 15:31:33

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

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

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