diff --git a/src/Common/HashTable/Hash.h b/src/Common/HashTable/Hash.h index c62be4fe2b81..6952e4bb1a57 100644 --- a/src/Common/HashTable/Hash.h +++ b/src/Common/HashTable/Hash.h @@ -310,7 +310,10 @@ requires (sizeof(T) <= sizeof(UInt64)) inline size_t hashCRC32(T key, DB::UInt64 updated_value = -1) { DB::UInt64 out {0}; - std::memcpy(&out, &key, sizeof(T)); + if constexpr (std::endian::native == std::endian::little) + std::memcpy(&out, &key, sizeof(T)); + else + std::memcpy(reinterpret_cast(&out) + sizeof(UInt64) - sizeof(T), &key, sizeof(T)); return intHashCRC32(out, updated_value); } diff --git a/src/DataTypes/Serializations/SerializationIPv4andIPv6.h b/src/DataTypes/Serializations/SerializationIPv4andIPv6.h index 61464962f1c1..1289f82d1c41 100644 --- a/src/DataTypes/Serializations/SerializationIPv4andIPv6.h +++ b/src/DataTypes/Serializations/SerializationIPv4andIPv6.h @@ -86,12 +86,12 @@ class SerializationIP : public SimpleTextSerialization void serializeBinary(const Field & field, WriteBuffer & ostr, const FormatSettings &) const override { IPv x = field.get(); - writeBinary(x, ostr); + writeBinaryLittleEndian(x, ostr); } void deserializeBinary(Field & field, ReadBuffer & istr, const FormatSettings &) const override { IPv x; - readBinary(x.toUnderType(), istr); + readBinaryLittleEndian(x.toUnderType(), istr); field = NearestFieldType(x); } void serializeBinary(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings &) const override