diff --git a/driver/src/main/scala/com/datastax/spark/connector/types/TypeConverter.scala b/driver/src/main/scala/com/datastax/spark/connector/types/TypeConverter.scala index 07856f764..901e67cb0 100644 --- a/driver/src/main/scala/com/datastax/spark/connector/types/TypeConverter.scala +++ b/driver/src/main/scala/com/datastax/spark/connector/types/TypeConverter.scala @@ -270,7 +270,18 @@ object TypeConverter { } } - private def byteArrayToString (x: Array[Byte]) = "0x" + x.map("%02x" format _).mkString + private val HEX_CHARS = Array( + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' + ) + private def byteArrayToString (x: Array[Byte]) : String = { + val result = new StringBuilder(x.length * 2) + x.foreach { b => + val v = b & 0xFF + result.append(HEX_CHARS(v >>> 4)) + result.append(HEX_CHARS(v & 0x0F)) + } + "0x" + result.toString() + } private def stringToByteArray (x: String) = new BigInteger(x.substring(2), 16).toByteArray private val ByteBufferTypeTag = implicitly[TypeTag[ByteBuffer]] diff --git a/driver/src/test/scala/com/datastax/spark/connector/types/TypeConverterTest.scala b/driver/src/test/scala/com/datastax/spark/connector/types/TypeConverterTest.scala index e34e96c97..2825935bc 100644 --- a/driver/src/test/scala/com/datastax/spark/connector/types/TypeConverterTest.scala +++ b/driver/src/test/scala/com/datastax/spark/connector/types/TypeConverterTest.scala @@ -153,6 +153,13 @@ class TypeConverterTest { assertEquals("a string", c.convert("a string")) } + @Test + def testByteArrayToString() { + val c = TypeConverter.forType[String] + val byteArray : Array[Byte] = Array(1,3,-56,45,23,67) + assertEquals("0x0103c82d1743", c.convert(byteArray)) + } + @Test def testDate() { val c = TypeConverter.forType[Date]