Float32MLE (Byte Order)
λ°μ΄νΈ μμ(Byte Order)λ μ€λ μ μ»΄ν¨ν°κ³΅νκ³Όμμ λ°°μ λ κ°λ μ΄μ§λ§ μ€λ¬΄μμλ μ€μ λ‘ κ³ λ €ν νμκ° μμλ€.
μ»΄ν¨ν°μμ λ°μ΄ν°λ₯Ό λ©λͺ¨λ¦¬μ μ μ₯ν λμ λ°μ΄νΈ μμλ λΉ μλμκ³Ό 리ν μλλ°© μμΌλ‘ λλμ΄μ§λλ° μ΄κ²μ CPU μν€ν μ²μ λ°λΌ λλμ΄μ§λ€κ³ νλ€. TCP λ€νΈμν¬ μ€ν μμλ ν¨ν·μ λ°μ΄νΈ μμλ λΉ μλμμΌλ‘ ꡬμ±λλ©° μΉ μ ν리μΌμ΄μ μμ μμ£Ό νμ©λλ μΈμ΄μΈ μλ°λ μ΄λ₯Ό κ°μνμ¬ λΉ μλμμ κΈ°λ³Έμ μΌλ‘ μ¬μ©νλ€. CPU μν€ν μ²μ λ€λ₯΄κ² λΉ μλμμΌλ‘ μ¬μ©λλ μ΄μ λ JVM μ΄λΌλ λ³λμ μ€νμ κΈ°λ°μΌλ‘ ꡬλλκΈ° λλ¬Έμ΄λΌκ³ νλ€. κ·Έλ¬λ, SCADA λλ PLC μ₯λΉμ κ°μ μΌλΆ μμ€ν μμλ λΉ μλμ λ°©μμ΄ μλ 리ν μλμ λλ λ―Έλ 리ν μλμμΌλ‘ λ°μ΄νΈ μμλ₯Ό ꡬμ±νκ³ μλλ° μ΄λ¬ν μμ€ν μ C μΈμ΄λ₯Ό κΈ°λ°μΌλ‘ λ§λ€μ΄μ§κΈ° λλ¬Έμ΄λ€.
μΌλ°μ μΈ μλ° μΉ κ°λ°μλ€μ΄ λ°μ΄νΈ μμλ₯Ό κ³ λ €νμ¬ λΉνΈ μ°μ° λλ μννΈ μ°μ°μ μνν κ²½μ°λ λ§μ§ μμ κ² κ°λ€.
Mid Little Endian, MLE
λΉ
μλμμ 리ν μλμ λΏλ§ μλλΌ λ°μ΄νΈ μμλ₯Ό μ€μνλ λ―Έλ 리ν μλμμ AB CD
μ λ°μ΄νΈ μμκ° μμλ CD AB
λ‘ νννλ κ²μ μλ―Ένλ€. 32λΉνΈλ‘ ꡬμ±λλ Float νμμ λ―Έλ 리ν μλμ λ°©μμΌλ‘ ꡬμ±ν κ²μ Float32MLE
μ΄λΌκ³ νκΈ°ν μ μλ€.
Base Convert: IEEE 754 Floating Point
Float32MLE Example
@DisplayName("Endian Test")
class EndianTest {
@DisplayName("Float32 Mid Little Endian")
@Test
void TestFloat32MLE() {
String hexadecimal = "00004260"; // 00 00 42 60
byte[] bytes = HexFormat.of().parseHex(hexadecimal);
float originValue = PooledByteBufAllocator.DEFAULT.buffer()
.writeBytes(new byte[]{bytes[2], bytes[3]}) // CD (42 60)
.writeBytes(new byte[]{bytes[0], bytes[1]}) // AB (00 00)
.readFloat();
float value = BigDecimal.valueOf(originValue)
.setScale(1, RoundingMode.HALF_UP)
.floatValue();
Assertions.assertEquals(56.0f, value);
}
}
Nettyμ ByteBuf ν΄λμ€μμλ λΉ
μλμ λ°©μμ readFloat
ν¨μμ 리ν μλμ λ°©μμ readFloatLE
ν¨μλ₯Ό μ 곡νκ³ μλ€. κ·Έλ¬λ, λ―Έλ 리ν μλμ λ°©μμ κ²½μ°μλ λ³λλ‘ μ 곡νμ§ μμΌλ―λ‘ μμ κ°μ΄ λ²νΌμ CD AB
μμΌλ‘ μ°κ³ λμ λΉ
μλμ λ°©μμΌλ‘ μ½μ΄μΌνλ€.