Skip to content

Instantly share code, notes, and snippets.

@iccir
Created August 10, 2017 10:32
Show Gist options
  • Save iccir/66d06a40872b1b22b9a8af6097802b81 to your computer and use it in GitHub Desktop.
Save iccir/66d06a40872b1b22b9a8af6097802b81 to your computer and use it in GitHub Desktop.
ninfo
#!/usr/bin/ruby
s = ARGV[0]
if s =~ /^0x/ then
n = s.hex
else
n = s.to_i
end
is_64 = (n > 0xFFFFFFFF)
def binary4(n)
sprintf("%04b", n)
end
def binary8(n)
binary4((n & 0xF0) >> 4) + "." + binary4(n & 0x0F)
end
def binary16(n)
binary8((n & 0xFF00) >> 8) + " : " + binary8(n & 0x00FF)
end
def binary32(n)
binary16((n & 0xFFFF0000) >> 16) + " | " + binary16(n & 0x0000FFFF)
end
if is_64 then
printf " long: %d\n", n.to_s
printf " double: %s\n", [ n ].pack("Q").unpack("d")[0].to_s
printf "\n"
printf " binary: %s\n", binary32((n & 0xFFFFFFFF00000000) >> 32)
printf " %s\n", binary32( n & 0x00000000FFFFFFFF )
printf " hex: 0x%08x\n", n
printf "\n"
printf "~binary: %s\n", binary32((~n & 0xFFFFFFFF00000000) >> 32)
printf " %s\n", binary32(~n & 0x00000000FFFFFFFF )
printf " ~hex: 0x%08x\n", (~n & 0xFFFFFFFFFFFFFFFF)
else
printf " int: %d\n", n.to_s
printf " float: %s\n", [ n ].pack("l").unpack("f")[0].to_s
printf " 4cc: '%s'\n", [ n ].pack("l").unpack("c4").reverse.pack("c4").to_s
printf "\n"
printf " binary: %s\n", binary32(n)
printf " hex: 0x%08x\n", n
printf "\n"
printf "~binary: %s\n", binary32(~n & 0xFFFFFFFF)
printf " ~hex: 0x%08x\n", (~n & 0xFFFFFFFF)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment