文档章节

JAVA将文件转成十六进制字符串和十六进制字符串生成文件的方法

zchuanzhao
 zchuanzhao
发布于 2015/12/24 09:49
字数 378
阅读 164
收藏 3

以下代码以APK文件为例,其他格式的文件方法一样,代码如下:

package com.evideostb.billsystem.module.update;

import java.io.*;

/**
 * Created by zhangchuanzhao on 2015-12-22 15:31.
 */
public class ExportApk {
   private static final String EXPORT_PATH = "E:/易通管理系统/开发库/exe/Android/";

   public static void main(String[] args) {
      ExportApk apk = new ExportApk();
//    apk.apkToHex();
      apk.hexToApk("","E:/易通管理系统/开发库/exe/Android/part_ytcorridor-debug.apk");
   }

   /**
    * APK文件转成十六进制
    */
   public void apkToHex(){
      try
      {
         StringBuffer sb = new StringBuffer();
         FileInputStream fis = new FileInputStream("C:/android/part_ytcorridor-debug.apk");
         java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();

         byte[] buffer = new byte[1024];
         int read = 1024;
         int readSize = 1024;
         while (read == readSize) {
            read = fis.read(buffer, 0, readSize);
            bos.write(buffer, 0, read);
         }
         // 得到图片的字节数组
         System.out.println(bos.toString());

         byte[] result = bos.toByteArray();
         // 字节数组转成十六进制
         String str = byte2HexStr(result);
            /*
             * 将十六进制串保存到txt文件中
             */
         PrintWriter pw = new PrintWriter(new FileWriter("C:/android/apk1.txt"));
         pw.println(str);
         pw.close();
      }
      catch (IOException e)
      {
         e.printStackTrace();
      }
   }

   /**
    * 十六进制转成APK
    * @param hex
    * @param filePath
    */
   public static void hexToApk(String hex, String filePath){
      StringBuilder sb = new StringBuilder();
      sb.append(hex);
      saveToApkFile(sb.toString().toUpperCase(), EXPORT_PATH + filePath);
   }

   public static void saveToApkFile(String src, String output)
   {
      if (src == null || src.length() == 0)
      {
         return;
      }
      try
      {
         FileOutputStream out = new FileOutputStream(new File(output));
         byte[] bytes = src.getBytes();
         for (int i = 0; i < bytes.length; i += 2)
         {
            out.write(charToInt(bytes[i]) * 16 + charToInt(bytes[i + 1]));
         }
         out.close();
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }
   }

   private static int charToInt(byte ch)
   {
      int val = 0;
      if (ch >= 0x30 && ch <= 0x39)
      {
         val = ch - 0x30;
      }
      else if (ch >= 0x41 && ch <= 0x46)
      {
         val = ch - 0x41 + 10;
      }
      return val;
   }

   /*
    * 实现字节数组向十六进制的转换方法一
    */
   public static String byte2HexStr(byte[] b)
   {
      String hs = "";
      String stmp = "";

      for (int n = 0; n < b.length; n++)
      {
         stmp = (Integer.toHexString(b[n] & 0XFF));
         if (stmp.length() == 1)
            hs = hs + "0" + stmp;
         else
            hs = hs + stmp;
      }
      return hs.toUpperCase();
   }

}


© 著作权归作者所有

共有 人打赏支持
zchuanzhao
粉丝 50
博文 239
码字总数 144832
作品 1
福州
程序员
私信 提问
Java中二进制,十进制,十六进制装换

Java中二进制,十进制,十六进制装换 十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinaryString(int i) ...

eric_zhang
2011/07/27
0
0
JNI调用c++实现AES加密解密

最近项目中用到数据加密解密的功能,由于Android、iOS以及服务器端都需要用到这个功能。而不同平台上加密出来的密文是不一样的,这样导致互相之间密文无法使用。于是决定使用C/C++完成加密解...

whoisliang
01/25
0
0
Java HexString-字节数组与十六进制字符数组转换

Java HexString-字节数组与十六进制字符数组转换 Java中byte(字节)用二进制表示占用8 bit (位),而我们知道16进制的每个字符需要用4位二进制位来表示,所以我们就可以把每个byte转换成两...

秋风醉了
2015/04/07
0
0
java基础--JDK安装、环境变量配置、工具开发第一个程序、数据类型、运算符

-----Java基础大纲----- **-----本章节-----** 1.Java语言的历史、特点及工作原理 2.JRE和JDK的介绍 3.Java运行环境和开发工具 4.Java基础语法 **-----下一章节-----** 5.条件语句 6.循环 7....

我是宁采臣
06/26
0
0
《Netkiller Java 手札》· 二进制文件操作大全

本文节选自《Netkiller Java 手札》 Netkiller Java 手札 Mr. Neo Chan, 陈景峯(BG7NYT) 中国广东省深圳市望海路半岛城邦三期 518067 +86 13113668890 $Id: book.xml 606 2013-05-29 09:52:...

netkiller-
10/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

iframe里弹出的层显示在整个网页上

通过在iframe页面添加js脚本,动态给父窗体创建一个div,然后设置让其显示在最顶层这样就可以了 在文件夹中创建两个文件,一个iframe页面,一个父页面index。

少年已不再年少
16分钟前
1
0
聊聊storm trident spout的_maxTransactionActive

序 本文主要研究一下storm trident spout的_maxTransactionActive MasterBatchCoordinator storm-core-1.2.2-sources.jar!/org/apache/storm/trident/topology/MasterBatchCoordinator.java ......

go4it
25分钟前
1
0
js时间函数getTime() 在苹果手机上返回NaN的问题

一、出现问题 var newStartDate = new Date('2017-08-30');var newStartTime = newStartDate.getTime(); 获取到的时间戳,在Android手机正常,在IPhone中返回NaN。 问题说明: 在苹果手机...

tianma3798
27分钟前
1
0
访问日志不记录静态文件、切割和静态元素过期时间

11月16日任务 11.22 访问日志不记录静态文件 11.23 访问日志切割 11.24 静态元素过期时间 11.22、 访问日志不记录静态文件 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录...

zgxlinux
33分钟前
1
0
爬虫教程」Python做一个简单爬虫,小白也能看懂的教程

俗话说“巧妇难为无米之炊”,除了传统的数据源,如历史年鉴,实验数据等,很难有更为简便快捷的方式获得数据,在目前互联网的飞速发展写,大量的数据可以通过网页直接采集,“网络爬虫”应运...

糖宝lsh
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部