Что представляет собой способ (ы) Scala для реализации этого Java-класса «byte [] to Hex» - PullRequest
26 голосов
/ 03 мая 2010

Меня особенно интересуют методы Scala (2.8) для построения строк с форматами, а также интересные способы сделать такую ​​возможность легко доступной, где она полезна (списки байтов, String, ...?) ..

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 ]

62 голосов
/ 03 мая 2010

Это не обрабатывает null так же, как ваш код.

object Hex {

  def valueOf(buf: Array[Byte]): String = buf.map("%02X" format _).mkString

  def valueOf(o: Byteable): String = valueOf(o.toByteArray)

}

Если вы хотите иметь возможность обрабатывать, возможно, null массивов, вам лучше сделать это с помощью вызова кода и выполнения:

val bytes: Array[Byte] = // something, possibly null
val string: Option[String] = Option(bytes).map(Hex.valueOf)
9 голосов
/ 03 мая 2010

Возможно, есть более элегантные способы, но что-то вроде:

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

должно работать.

5 голосов
/ 03 мая 2010

Вы должны использовать тип Option в Scala вместо 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...