Mercurial > repos > tabletprog
changeset 158:38140b7dbe3d
Add parseHex32 and parseHex64 to string objects
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 10 Aug 2013 15:20:38 -0700 |
parents | 55e0dca7d3d7 |
children | d81de309a51f |
files | modules/string.tp samples/stringops.tp |
diffstat | 2 files changed, 61 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/modules/string.tp Sat Aug 10 15:06:56 2013 -0700 +++ b/modules/string.tp Sat Aug 10 15:20:38 2013 -0700 @@ -76,6 +76,64 @@ intret } + parseHex32 <- { + num <- 0u32 + cur <- 0 + a <- uint32: ("a" byte: 0) + A <- uint32: ("A" byte: 0) + f <- uint32: ("f" byte: 0) + F <- uint32: ("F" byte: 0) + zero <- "0" byte: 0 + nine <- "9" byte: 0 + while: { cur < byte_length} do: { + b <- uint32: (byte: cur) + cur <- cur + 1 + if: b >= zero && b <= nine { + num <- num * 16 + (b - zero) + } else: { + if: b >= a && b <= f { + num <- num * 16 + (b - a) + 10u32 + } else: { + if: b >= A && b <= F { + num <- num * 16 + (b - A) + 10u32 + } else: { + cur <- byte_length + } + } + } + } + num + } + + parseHex64 <- { + num <- 0u64 + cur <- 0 + a <- uint64: ("a" byte: 0) + A <- uint64: ("A" byte: 0) + f <- uint64: ("f" byte: 0) + F <- uint64: ("F" byte: 0) + zero <- "0" byte: 0 + nine <- "9" byte: 0 + while: { cur < byte_length} do: { + b <- uint64: (byte: cur) + cur <- cur + 1 + if: b >= zero && b <= nine { + num <- num * 16 + (b - zero) + } else: { + if: b >= a && b <= f { + num <- num * 16 + (b - a) + 10u64 + } else: { + if: b >= A && b <= F { + num <- num * 16 + (b - A) + 10u64 + } else: { + cur <- byte_length + } + } + } + } + num + } + llMessage: hash withVars: { intret <- (obj_int32 ptr) i <- uint32_t
--- a/samples/stringops.tp Sat Aug 10 15:06:56 2013 -0700 +++ b/samples/stringops.tp Sat Aug 10 15:20:38 2013 -0700 @@ -17,5 +17,8 @@ res <- "foobarbaz" partitionOn: "bar" print: "Before: " . (res before) . "\n" print: "After: " . (res after) . "\n" + + print: (string: ("12abcDEF" parseHex32)) . "\n" + print: (string: ("FFFFFFFFFF" parseHex64)) . "\n" } }