견고성-전환

견고성은 암시 적 변환과 명시 적 변환을 허용합니다. Solidity 컴파일러는 암시 적 변환이 가능하지 않고 정보 손실이없는 경우 두 데이터 유형 간의 암시 적 변환을 허용합니다. 예를 들어 uint8은 uint16으로 변환 가능하지만 int8은 uint256에서 허용되지 않는 음수 값을 포함 할 수 있으므로 int8은 uint256으로 변환 할 수 있습니다.

명시 적 변환

생성자 구문을 사용하여 데이터 유형을 다른 유형으로 명시 적으로 변환 할 수 있습니다.

int8 y = -3;
uint x = uint(y);
//Now x = 0xfffff..fd == two complement representation of -3 in 256 bit format.

더 작은 유형으로 변환하면 더 높은 순서의 비트가 필요합니다.

uint32 a = 0x12345678;
uint16 b = uint16(a); // b = 0x5678

더 높은 유형으로 변환하면 왼쪽에 패딩 비트가 추가됩니다.

uint16 a = 0x1234;
uint32 b = uint32(a); // b = 0x00001234

더 작은 바이트로 변환하면 더 많은 데이터가 필요합니다.

bytes2 a = 0x1234;
bytes1 b = bytes1(a); // b = 0x12

더 큰 바이트로 변환하면 오른쪽에 패딩 비트가 추가됩니다.

bytes2 a = 0x1234;
bytes4 b = bytes4(a); // b = 0x12340000

고정 크기 바이트와 int 간의 변환은 둘 다 동일한 크기 일 때만 가능합니다.

bytes2 a = 0x1234;
uint32 b = uint16(a); // b = 0x00001234
uint32 c = uint32(bytes4(a)); // c = 0x12340000
uint8 d = uint8(uint16(a)); // d = 0x34
uint8 e = uint8(bytes1(a)); // e = 0x12

잘림이 필요하지 않은 경우 16 진수를 모든 정수 유형에 할당 할 수 있습니다.

uint8 a = 12; // no error
uint32 b = 1234; // no error
uint16 c = 0x123456; // error, as truncation required to 0x3456