byte十六进制转换读卡

需求:将一串十六进制字符串,弄成十进制
1.截取特定位数的字符串,比如去除 前面的标识符和后面的校验码,只需要中间部分
2.拿到十六进制字符串
3.将十六进制字符串转成byte 字节数组
4.调换字节数组的顺序,
4.将新字节数组转成十进制字符串

例如:
原始字符串是:017CC411F700000000
去除无效标识符和校验码后,得到的字符串:7CC411F7
转成字符数组: 7C,C4,11,F7
调换顺序: F7 ,11, C4 ,7C
将 F711C47C 转成十进制字符串:4145136764

为什么要搞那么复杂呢?
因为我在弄一个读卡的需求,读出来的就是一串十六进制字符串,然后我们的卡号是十进制的一串,必须要把十六进制转成十进制,然后去我们的数据库里面,根据卡号,比对,查询信息,得到卡号对应的人员信息

package com.example.iosdialogdemo;import static java.util.Collections.reverse;import android.os.Bundle;
import android.util.Log;import com.example.iosdialogdemo.utils.DataChangeUtils;import androidx.appcompat.app.AppCompatActivity;import com.example.iosdialogdemo.utils.DataConversion;
import com.example.iosdialogdemo.utils.MyFunc;
import com.example.iosdialogdemo.utils.HexUtil;import com.example.iosdialogdemo.utils.DataChangeUtils;import java.util.Arrays;public class TwoActivity extends AppCompatActivity {private String code1 = "ECD8FCF6";private String code2 = "7CC411F7";private String code3 = "01ECD8FCF600000000";private String code4 = "017CC411F700000000";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_first);/**  0 - 1  两位byte 代表读卡和卡离开的字段* 2-9 代表卡号*10-17 代表校验码* EC D8 FC F6   4143765740* 7C C4 11 F7   4145136764* * *//*String code3 = DataChangeUtils.createHex(code1);String byteArrToHex = MyFunc.ByteArrToHex(null);Log.e("TAG", ""+code5);需要做什么呢 ?30   48十六进制转十进制可以了、接下来是拆分数组  然后 调换位置00 7C C4 11 F7 00 00 00 00调换可以了  接下来  就是转十进制*////  bytesToHex(  hexTobytes(code1));String str = code3.substring(2, 9);long a = DataConversion.hexToDec("30");byte[] b = DataConversion.decodeHexString(code1);int[] array = {7, 8, 9, 10, 11};Log.e("Array : ", Arrays.toString(array)); // print array// Call function to get reversed arrayint[] reversedArray = reverse(array);byte[] reversedArray2 = reverse2(b);Log.e("Reversed array : ", Arrays.toString(reversedArray));Log.e("Reversed array_two : ", Arrays.toString(b));Log.e("Reversed array_two : ", Arrays.toString(reversedArray2));String coede6=    DataConversion.encodeHexString(reversedArray2);long codessss=   DataConversion.hexToDec(coede6);Log.e("TAG", "" + a +"====="+coede6+"==???==="+codessss+"------------"+str);  // F6FCD8EC}static int[] reverse(int[] array) {int[] newArray = new int[array.length];for (int i = 0; i < array.length; i++) {newArray[array.length - 1 - i] = array[i];}return newArray;}static byte[] reverse2(byte[] array) {byte[] newArray = new byte[array.length];for (int i = 0; i < array.length; i++) {newArray[array.length - 1 - i] = array[i];}return newArray;}}
package com.example.iosdialogdemo;import static java.util.Collections.reverse;import android.os.Bundle;
import android.util.Log;import com.example.iosdialogdemo.utils.DataChangeUtils;import androidx.appcompat.app.AppCompatActivity;import com.example.iosdialogdemo.utils.DataConversion;
import com.example.iosdialogdemo.utils.MyFunc;
import com.example.iosdialogdemo.utils.HexUtil;import com.example.iosdialogdemo.utils.DataChangeUtils;import java.util.Arrays;public class TwoActivity extends AppCompatActivity {
//    private String code1 = "ECD8FCF6";private String code2 = "7CC411F7";private String code3 = "01ECD8FCF600000000";private String code4 = "017CC411F700000000";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_first);String str = code3.substring(2, 10);byte[] b = DataConversion.decodeHexString(str);byte[] reversedArray2 = reverse2(b);String coede6=    DataConversion.encodeHexString(reversedArray2);long codessss=   DataConversion.hexToDec(coede6);Log.e("TAG", ""   +"====="+coede6+"==???==="+codessss+"------------"+str);  // F6FCD8EC}static byte[] reverse2(byte[] array) {byte[] newArray = new byte[array.length];for (int i = 0; i < array.length; i++) {newArray[array.length - 1 - i] = array[i];}return newArray;}
}
package com.example.iosdialogdemo;import static java.util.Collections.reverse;import android.os.Bundle;
import android.util.Log;import com.example.iosdialogdemo.utils.DataChangeUtils;import androidx.appcompat.app.AppCompatActivity;import com.example.iosdialogdemo.utils.DataConversion;
import com.example.iosdialogdemo.utils.MyFunc;
import com.example.iosdialogdemo.utils.HexUtil;import com.example.iosdialogdemo.utils.DataChangeUtils;import java.util.Arrays;public class TwoActivity extends AppCompatActivity {
//    private String code1 = "ECD8FCF6";private String code2 = "7CC411F7";private String code3 = "01ECD8FCF600000000";private String code4 = "017CC411F700000000";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_first);long intCode3=   DataConversion.hexToDec(DataConversion.encodeHexString(reverse2(DataConversion.decodeHexString(code3.substring(2, 10)))));long intCode4=   DataConversion.hexToDec(DataConversion.encodeHexString(reverse2(DataConversion.decodeHexString(code4.substring(2, 10)))));Log.e("TAG", intCode3+"========="+intCode4);  // F6FCD8EC}static byte[] reverse2(byte[] array) {byte[] newArray = new byte[array.length];for (int i = 0; i < array.length; i++) {newArray[array.length - 1 - i] = array[i];}return newArray;}
}
package com.example.iosdialogdemo;import static java.util.Collections.reverse;import android.os.Bundle;
import android.util.Log;import com.example.iosdialogdemo.utils.DataChangeUtils;import androidx.appcompat.app.AppCompatActivity;import com.example.iosdialogdemo.utils.DataConversion;
import com.example.iosdialogdemo.utils.MyFunc;
import com.example.iosdialogdemo.utils.HexUtil;import com.example.iosdialogdemo.utils.DataChangeUtils;import java.util.Arrays;public class TwoActivity extends AppCompatActivity {
//    private String code1 = "ECD8FCF6";private String code2 = "7CC411F7";private String code3 = "01ECD8FCF600000000";private String code4 = "017CC411F700000000";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_first);long intCode3=   DataConversion.hexToDec(DataConversion.encodeHexString(DataConversion.reverse2(DataConversion.decodeHexString(code3.substring(2, 10)))));long intCode4=   DataConversion.hexToDec(DataConversion.encodeHexString(DataConversion.reverse2(DataConversion.decodeHexString(code4.substring(2, 10)))));Log.e("TAG", intCode3+"===??======"+intCode4);  // F6FCD8EC}}
package com.example.iosdialogdemo.utils;/*** 数据转换工具** @author :frey* @date:2019/4/03 16:15*/
public class DataConversion {/*** 判断奇数或偶数,位运算,最后一位是1则为奇数,为0是偶数** @param num* @return*/public static int isOdd(int num) {return num & 0x1;}/*** 将int转成byte** @param number* @return*/public static byte intToByte(int number) {return hexToByte(intToHex(number));}/*** 将int转成hex字符串** @param number* @return*/public static String intToHex(int number) {String st = Integer.toHexString(number).toUpperCase();return String.format("%2s", st).replaceAll(" ", "0");}/*** 字节转十进制** @param b* @return*/public static int byteToDec(byte b) {String s = byteToHex(b);return (int) hexToDec(s);}/*** 字节数组转十进制** @param bytes* @return*/public static int bytesToDec(byte[] bytes) {String s = encodeHexString(bytes);return (int) hexToDec(s);}/*** Hex字符串转int** @param inHex* @return*/public static int hexToInt(String inHex) {return Integer.parseInt(inHex, 16);}/*** 字节转十六进制字符串** @param num* @return*/public static String byteToHex(byte num) {char[] hexDigits = new char[2];hexDigits[0] = Character.forDigit((num >> 4) & 0xF, 16);hexDigits[1] = Character.forDigit((num & 0xF), 16);return new String(hexDigits).toUpperCase();}/*** 十六进制转byte字节** @param hexString* @return*/public static byte hexToByte(String hexString) {int firstDigit = toDigit(hexString.charAt(0));int secondDigit = toDigit(hexString.charAt(1));return (byte) ((firstDigit << 4) + secondDigit);}private static int toDigit(char hexChar) {int digit = Character.digit(hexChar, 16);if (digit == -1) {throw new IllegalArgumentException("Invalid Hexadecimal Character: " + hexChar);}return digit;}/*** 字节数组转十六进制** @param byteArray* @return*/public static String encodeHexString(byte[] byteArray) {if (byteArray == null) {return "";}StringBuffer hexStringBuffer = new StringBuffer();for (int i = 0; i < byteArray.length; i++) {hexStringBuffer.append(byteToHex(byteArray[i]));}return hexStringBuffer.toString().toUpperCase();}/*** 十六进制转字节数组** @param hexString* @return*/public static byte[] decodeHexString(String hexString) {if (hexString.length() % 2 == 1) {throw new IllegalArgumentException("Invalid hexadecimal String supplied.");}byte[] bytes = new byte[hexString.length() / 2];for (int i = 0; i < hexString.length(); i += 2) {bytes[i / 2] = hexToByte(hexString.substring(i, i + 2));}return bytes;}/*** 十进制转十六进制** @param dec* @return*/public static String decToHex(int dec) {String hex = Integer.toHexString(dec);if (hex.length() == 1) {hex = '0' + hex;}return hex.toLowerCase();}/*** 十六进制转十进制** @param hex* @return*/public static long hexToDec(String hex) {return Long.parseLong(hex, 16);}public static byte[] reverse2(byte[] array) {byte[] newArray = new byte[array.length];for (int i = 0; i < array.length; i++) {newArray[array.length - 1 - i] = array[i];}return newArray;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剑指offer--调整数字顺序使奇数位于偶数前面

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有的偶数位于数组的后半部分. 算法分析 算法:利用快速排序的一次划分思想&#xff0c;后面的奇数往前移&#xff0c;前面的偶数往后移 时间复杂度 &#xff1a;O(n) 空间…

垃圾渗滤液如何有效处理

垃圾渗滤液&#xff0c;通常称为垃圾填埋场的渗滤液&#xff0c;是一种复杂的高浓度有机废水&#xff0c;含有多种有毒有害物质。有效处理垃圾渗滤液对环境保护至关重要。这里是一些常见且有效的处理方法&#xff1a; ### 预处理 ##### 1. 调节池 - **pH调整**&#xff1a;通过…

JavaWeb开发06-原理-Spring配置优先级-Bean管理-SpringBoot原理-Maven继承和聚合-私服

一、Spring配置优先级 不同配置文件&#xff0c;配置同一个属性谁有效 properties>yml>yaml 命令行参数>Java系统属性 项目打包后要改变属性&#xff1a; 红色是Java系统属性&#xff0c;绿色是命令行参数 ‘ 二、Bean管理 1.获取bean 获取IOC容器&#xff1a;ap…

中国1KM降水侵蚀因子R(2000-2022)

降雨侵蚀力因子其实是用来描述降雨对土壤侵蚀的潜在能力大小的&#xff0c;就是降雨的冲刷对土壤的侵蚀效应。 到降雨侵蚀力因子R的计算方法非常的繁多&#xff0c;不过这些计算方法总结下来&#xff0c;核心思路其实大概可以分为两种&#xff1a;一种是将降雨的动能引入模型来…

shell(52) : 获取资源信息(过滤无效信息)

cpu负载和cpu使用率 # cpu使用率 2.9 top -bn1|grep Cpu|awk {print $2} # cpu负载 0.13 top -bn1|grep load |awk {print $14} 内存使用率 # 16227860_12608036 总_使用 单位B free |grep Mem|awk {print $2"_"$3} 磁盘使用率 df -h | awk {print $1"_&qu…

资料总结分享:临床重要数据库

目录 RefSeqGene数据库 UCSC基因组数据库 gnomAD&#xff08;全称&#xff1a;Genome Aggregation Database&#xff09; dbSNP&#xff08;Single Nucleotide Polymorphism Database&#xff09; ExAC数据库&#xff08;Exome Aggregation Consortium&#xff09; 1000 G…

重庆思庄技术分享——Bug 12861117 RMAN 会话旋转

Bug 12861117 RMAN 会话旋转 现象&#xff1a; CPU 使用 率过高 挂起&#xff08;进程旋转&#xff09; RMAN-2005 / RMAN-565 / LFI-5 RMAN &#xff08;Recovery Manager&#xff09; 描述&#xff1a; 在某些情况下&#xff0c;如果写入日志文件时遇到磁盘已满的情况 或输入…

【数据结构-串-数组-广义表】

目录 1 串-理解1.1 串的抽象定义&#xff1a;-理解1.2 串的存储结构-不断掌握1.2.1 顺序存储结构&#xff1a;1.2.2 链式存储结构&#xff1a; 1.3 串的模式匹配算法&#xff1a;-掌握1.3.1 BF暴力求解算法-代码 -掌握1.3.2 KMP求解算法-代码--掌握 2 数组-不断掌握2.1 顺序存储…

【总结】mysql 使用shell 脚本远程安装启动不会自动退出结束

问题 使用shell脚本&#xff0c;远程安装部署mysql并启动mysql&#xff0c;当mysql启动命令执行完毕后&#xff0c;远程ssh 命令不会自动结束&#xff0c;安装程序一直卡着不动。 ssh xxx192.168.10.11 “install_mysql.sh” 在 install_mysql.sh 脚本中&#xff0c;启动mysq…

计算机网络3——数据链路层5高速以太网

文章目录 一、100BASE-T 以太网二、吉比特以太网三、10吉比特以太网(10GbE)和更快的以太网四、使用以太网进行宽带接入 随着电子技术的发展&#xff0c;以太网的速率也不断提升。从传统的10Mbits以太网一直发展到现在常用的速率为1Gbits的吉比特以太网&#xff0c;甚至更快的以…

1.求指定宽度的文本的高度,2.ubuntu下ping ipv6,3.git提示:终止提交因为提交说明为空

1.如何求指定宽度的文本的高度 paintEvent(QPaintEvent *event) {QPainter painter(this);QString text "Invalid parameter passed to C runtime function.";QFontMetrics fm(qApp->font());QTextDocument doc(text);doc.setDefaultFont(painter.font());doc.s…

Java中的super

package day33; ​ public class Person {public String name;public int age; ​public Person() {System.out.println("调用了父类的无参构造");} } ​ package day33; ​ public class teacher extends Person{public teacher() {System.out.println("调用了…

为什么iPhone支持整页中文OCR应用很少?有什么好的解决方法?

iPhone上面没有支持中文整页OCR识别的app&#xff0c;这是一个值得探讨的问题。OCR&#xff0c;即光学字符识别&#xff0c;是一种将纸质文档或图片中的文字转化为可编辑文本的技术。随着科技的发展&#xff0c;OCR技术已经广泛应用于各个领域&#xff0c;包括文档处理、图像识…

Python | Leetcode Python题解之第44题通配符匹配

题目&#xff1a; 题解&#xff1a; class Solution:def isMatch(self, s: str, p: str) -> bool:def allStars(st: str, left: int, right: int) -> bool:return all(st[i] * for i in range(left, right))def charMatch(u: str, v: str) -> bool:return u v or v…

paddlepaddle/paddle 命令注入漏洞复现_$1500 CVE-2024-0934

目录 1.漏洞概述 2.影响版本 3.漏洞等级 4.漏洞复现 4.1 安装漏洞环境

Linux开机启动流程

Linux开机启动流程详细步骤如下图&#xff1a; 其中&#xff1a; POST:Power On Self Test --加电自检 BIOS: Basic Input Output System --基础输入输出系统 MBR: Master Boot Record --主引导记录 GRUB: GRand Uni…

计算机视觉成新宠儿,三防平板助力医疗保健

计算机视觉是医疗保健行业的一个相当新的趋势&#xff0c;其中图像用于帮助识别和预测患者的诊断&#xff0c;提高准确性&#xff0c;利用计算机图像来做到这一点。图像被拍摄并上传到系统中&#xff0c;然后通过计算机算法进行分析&#xff0c;以优化医疗诊断&#xff0c;例如…

【数据结构(邓俊辉)学习笔记】绪论04——算法分析

文章目录 0. 前言1. 算法分析2.级数2.1基本形式2.2 收敛级数 3.循环 vs 级数4.示例 0. 前言 通过以基本计算模型作为参照&#xff0c;并且以大O记号的形式在上面添加适当刻度&#xff0c;已经建立一套对DSA进行分析的完整工具和体系。不清楚的可以看看复杂度度量 、复杂度分析…

什么是健康管理——健康评估实训室

健康管理—健康评估实训室是一种以健康评估为核心&#xff0c;集教学、实验、实训为一体的多功能教学场所&#xff0c;其主要目的在于通过模拟真实的工作场景和运用先进的健康评估工具&#xff0c;帮助学生掌握健康评估的理论知识和实际操作技能&#xff0c;以便在未来的职业生…

嘴尚绝卤味:传统与现代的完美结合

卤味&#xff0c;作为中国传统美食中的一大类&#xff0c;凭借其独特的口感和丰富的风味&#xff0c;一直深受食客们的喜爱。而在众多卤味品牌中&#xff0c;嘴尚绝卤味凭借其卓越的品质和创新的口味&#xff0c;成为了市场上的佼佼者。今天&#xff0c;就让我们一起来品味嘴尚…