Last active
September 17, 2019 03:09
-
-
Save granoeste/91a011bb886b6210799620f39f53a6d6 to your computer and use it in GitHub Desktop.
UUIDを16ビットで分割
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import kotlinx.coroutines.* | |
import java.time.LocalDateTime | |
import java.util.UUID | |
import java.math.*; | |
/** | |
* UUIDを16ビット分割 | |
*/ | |
fun main(args : Array<String>) { | |
val uuid = UUID.fromString("550e8400-e29b-41d4-a716-446655440000") | |
println("uuid:$uuid") | |
println("---") | |
val msb = uuid.getMostSignificantBits() | |
val lsb = uuid.getLeastSignificantBits() | |
println("msb:$msb (0x${"%x".format(msb)})") | |
println("lsb:$lsb (0x${"%x".format(lsb)})") | |
val param1 = msb shr 48 and 0xFFFF | |
val param2 = msb shr 32 and 0xFFFF | |
val param3 = msb shr 16 and 0xFFFF | |
val param4 = msb shr 0 and 0xFFFF | |
val param5 = lsb shr 48 and 0xFFFF | |
val param6 = lsb shr 32 and 0xFFFF | |
val param7 = lsb shr 16 and 0xFFFF | |
val param8 = lsb shr 0 and 0xFFFF | |
println(" 1: $param1 (0x${"%04x".format(param1)})") | |
println(" 2: $param2 (0x${"%04x".format(param2)})") | |
println(" 3: $param3 (0x${"%04x".format(param3)})") | |
println(" 4: $param4 (0x${"%04x".format(param4)})") | |
println(" 5: $param5 (0x${"%04x".format(param5)})") | |
println(" 6: $param6 (0x${"%04x".format(param6)})") | |
println(" 7: $param7 (0x${"%04x".format(param7)})") | |
println(" 8: $param8 (0x${"%04x".format(param8)})") | |
println("---") | |
val uuidLong = BigInteger(uuid.toString().replace("-",""), 16) | |
println("uuidLong: $uuidLong") | |
val param1a = uuidLong.shiftRight(112).and(BigInteger("FFFF", 16)).longValueExact(); | |
val param2a = uuidLong.shiftRight( 96).and(BigInteger("FFFF", 16)).longValueExact(); | |
val param3a = uuidLong.shiftRight( 80).and(BigInteger("FFFF", 16)).longValueExact(); | |
val param4a = uuidLong.shiftRight( 64).and(BigInteger("FFFF", 16)).longValueExact(); | |
val param5a = uuidLong.shiftRight( 48).and(BigInteger("FFFF", 16)).longValueExact(); | |
val param6a = uuidLong.shiftRight( 32).and(BigInteger("FFFF", 16)).longValueExact(); | |
val param7a = uuidLong.shiftRight( 16).and(BigInteger("FFFF", 16)).longValueExact(); | |
val param8a = uuidLong.shiftRight( 0).and(BigInteger("FFFF", 16)).longValueExact(); | |
println(" 1: $param1a (0x${"%04x".format(param1a)})") | |
println(" 2: $param2a (0x${"%04x".format(param2a)})") | |
println(" 3: $param3a (0x${"%04x".format(param3a)})") | |
println(" 4: $param4a (0x${"%04x".format(param4a)})") | |
println(" 5: $param5a (0x${"%04x".format(param5a)})") | |
println(" 6: $param6a (0x${"%04x".format(param6a)})") | |
println(" 7: $param7a (0x${"%04x".format(param7a)})") | |
println(" 8: $param8a (0x${"%04x".format(param8a)})") | |
println("---") | |
val src = 0x3060F0E0 | |
val shift = src shr 24 | |
val mask = 0xFF | |
val result = shift and mask | |
println(" src:0b${Integer.toBinaryString(src)} (0x${Integer.toHexString(src)})") | |
println(" shift:0b${Integer.toBinaryString(shift)}") | |
println(" mask:0b${Integer.toBinaryString(mask)}") | |
println("result:0b${Integer.toBinaryString(result)} (0x${Integer.toHexString(result)})") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment