我有一个非常长的十六进制字符串。
val hexStr = "6579ba5175087ae94f289dc46b4aab805217d7c0372f68631442e0950b535a3a2c566cacd4c8f367e68d39fd07e88adcc3e6497dc793c2dcad994dd3b5c4b74a20e816695d82856b0d8c2853141bb9bb2236c6ddc07b60075fe37d5f60287e0b542c6c47ec172883e79adf83d19163d698c50ab8e70d862ae4ea38964031c97d"
val hexMap = ('A' to 'F').zipWithIndex.map{case (c,i) => (c, i+10) }.toMap
def toHex(str: String) = {
def toDec:PartialFunction[Char, Int] = {
case c if hexMap.isDefinedAt(c)=>
hexMap(c)
case c => c.asDigit
}
val h = str.reverse.zipWithIndex
h.foldLeft(BigInt(0)){ case (x,(c,i)) => x + (BigInt(toDec(c)) * (BigInt(16) pow i))
}
}
调用toHex(hexStr)
将产生
-108510794603240369573054864637132287318772867810563957913302194314864518557374668031774623887439510929033883541346004435263772843343293163699936959100821415781894682693381965433598320482583614884522426697017992684587643668557555164019950155571119830400184127425065856214285578629986381577449968065171417872003
编辑: 似乎字符串中存在错误,不管怎样,建议的解决方案更好。
注:本段内容与IT技术无关。