代码之家  ›  专栏  ›  技术社区  ›  nicerobot

Scala实现这个Java“byte[]to Hex”类的方法是什么

  •  23
  • nicerobot  · 技术社区  · 15 年前

    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());
      }
    }
    

    这只是一个学习练习(因此Java的实用性和实现并不重要)

    谢谢

    3 回复  |  直到 15 年前
        1
  •  66
  •   Ben Lings    9 年前

    这可不行 null

    object Hex {
    
      def valueOf(buf: Array[Byte]): String = buf.map("%02X" format _).mkString
    
      def valueOf(o: Byteable): String = valueOf(o.toByteArray)
    
    }
    

    如果你想处理- 数组,通过调用代码和执行以下操作可能会更好:

    val bytes: Array[Byte] = // something, possibly null
    val string: Option[String] = Option(bytes).map(Hex.valueOf)
    
        2
  •  9
  •   Kyll GUISSOUMA Issam    8 年前

    也许还有更优雅的方式,但有以下几种:

    def valueOf(bytes : List[Byte]) = bytes.map{
      b => String.format("%02X", new java.lang.Integer(b & 0xff)) 
    }.mkString
    

        3
  •  5
  •   michael.kebe    15 年前

    你应该用斯卡拉的 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))