summaryrefslogtreecommitdiff
path: root/src/ConversionUtils.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/ConversionUtils.scala')
-rw-r--r--src/ConversionUtils.scala38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/ConversionUtils.scala b/src/ConversionUtils.scala
new file mode 100644
index 0000000..5d01429
--- /dev/null
+++ b/src/ConversionUtils.scala
@@ -0,0 +1,38 @@
+package main.utils
+
+import ByteUtils.WithBitOpts
+
+object ConversionUtils {
+ def hexStr2ByteArr(s: String): Iterator[Byte] =
+ padToByte(s).grouped(2).map(byteStr2Byte)
+
+ def byteStr2Byte(str: String): Byte =
+ charSeq2Byte(str.toSeq)
+
+ def charSeq2Byte(seq: Seq[Char]): Byte =
+ seq.map(octet2nibble).reduce(joinNibbles)
+
+ def joinNibbles(a: Byte, b: Byte): Byte =
+ ((a @<< 4) @+ b)
+
+ def padToByte(s: String): String =
+ if (s.length % 2 != 0) s + "0" else s
+
+ def octet2nibble(c: Char): Byte = {
+ (c.toLower match {
+ case c if c >= 'a' && c <= 'f' =>
+ (c - 'a') + 10.toByte
+ case c if c >= '0' && c <= '9' =>
+ c - '0'
+ case _ =>
+ throw new IllegalArgumentException(s"Invalid hexadecimal character: $c")
+ }).toByte
+ }
+
+ def hexStr2Base64String(s: String): String = {
+ import io.github.marklister.base64.Base64._
+
+ hexStr2ByteArr(s).toArray.toBase64
+ }
+}
+