scala 样例代码 BinToHex 将二进制文件转换成16进制字符

如题: 练习代码, 详细在Github上scala 案例下面

Github: https://github.com/duchaoqun/aoye

package info.aoye

import java.io.{File, FileInputStream}
import java.io.BufferedWriter
import java.io.FileWriter
import java.io.IOException

object BinToHex extends {
  val hexSymbols = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f")

  val BITS_PER_HEX_DIGIT = 4

  def toHexFromByte(b: Byte): String = {
    val leftSymbol = ((b >>> BITS_PER_HEX_DIGIT) & 0x0f).toByte
    val rightSymbol = (b & 0x0f).toByte
    hexSymbols(leftSymbol) + hexSymbols(rightSymbol)
  }

  def toHexFromBytes(bytes: Array[Byte]): String = {
    if (bytes == null || bytes.length == 0) return ""
    // there are 2 hex digits per byte
    // 每个byte有两个hex字符
    // 创建一个缓冲区来存放这个内容
    val hexBuffer = new StringBuilder(bytes.length * 2)
    // for each byte, convert it to hex and append it to the buffer
    // 然后操作每一个byte, 把他转换成hex后添加到缓冲区中.
    bytes.foreach(b => hexBuffer.append(toHexFromByte(b)))
    hexBuffer.toString
  }

  @throws[IOException]
  def main(args: Array[String]): Unit = {
    try {
      val fileInput = new File("C:\\Users\\ducha\\Desktop\\1.jpg")
      val fileOutput = new File("C:\\Users\\ducha\\Desktop\\1.txt")
      // 定义输入对象
      val fis = new FileInputStream(fileInput)
      // 定义输出对象
      val fos = new BufferedWriter(new FileWriter(fileOutput))
      // 定义缓冲数组
      val bytes = new Array[Byte](1)

      while(fis.read(bytes)==1){
        fos.write(toHexFromBytes(bytes))
      }
      // 刷新并写入数据
      fos.flush()
      fos.close()
    } catch {
      case e: Exception =>
        e.printStackTrace()
    }
  }
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值