我在斯卡拉特别感兴趣(2.8)技术与格式字符串建设,以及有趣的方式来做出这样的能力,容易接近的地方是非常有用的(字节的列表,字符串,...?)..
public class Hex {
public static String valueOf (final byte buf[]) {
if (null == buf) {
return null;
}
final StringBuilder sb = new StringBuilder(buf.length * 2);
for (final byte b : buf) {
sb.append(String.format("%02X", b & 0xff));
}
return sb.toString();
}
public static String valueOf (final Byteable o) {
return valueOf(o.toByteArray());
}
}
Run Code Online (Sandbox Code Playgroud)
这只是一个学习练习(因此Java的实用程序和实现不是问题.)
谢谢
Ben*_*ngs 62
这null与您的代码的处理方式不同.
object Hex {
def valueOf(buf: Array[Byte]): String = buf.map("%02X" format _).mkString
def valueOf(o: Byteable): String = valueOf(o.toByteArray)
}
Run Code Online (Sandbox Code Playgroud)
如果您希望能够处理可能的null数组,那么通过调用代码并执行以下操作可能会更好:
val bytes: Array[Byte] = // something, possibly null
val string: Option[String] = Option(bytes).map(Hex.valueOf)
Run Code Online (Sandbox Code Playgroud)
也许有更优雅的方式,但有类似的东西:
def valueOf(bytes : List[Byte]) = bytes.map{
b => String.format("%02X", new java.lang.Integer(b & 0xff))
}.mkString
Run Code Online (Sandbox Code Playgroud)
应该管用.
您应该使用Scala的Option类型而不是null.(这是使用Scala 2.8.0.RC1测试的)
object Hex {
def valueOf (buf: Array[Byte]) = {
if (null == buf) {
None
} else {
val sb = new StringBuilder(buf.length * 2)
for (b <- buf) {
sb.append("%02X".format(b & 0xff))
}
Some(sb.toString())
}
}
/*
def valueOf(o: Byteable) = {
return valueOf(o.toByteArray());
}
*/
}
println(Hex.valueOf(Array(-3, -2, -1, 0, 1, 2, 3)))
println(Hex.valueOf(null))
Run Code Online (Sandbox Code Playgroud)