最近、インターネット・オブ・シングスのプロジェクトを行っているので、16進変換の機能を使うことが多いので、みんなが使える方法をいくつか書いて集めました。
インポートjava.text.SimpleDateFormat;
インポートjava.util.Calendar;
インポートjava.util.Date;
/ ****
バイトおよび16進変換クラス
**
@author Administrator
*
* /
public class ByteUtils { / ** * byte []から16進文字列 * / public static String Bytes2HexString(byte [] b) { String ret = ""; for(int i = 0; i <b.length; i ++){ String hex = Integer.toHexString(b [i]&0xFF); if(hex.length()== 1){ hex = '0' + hex; } ret + = hex.toUpperCase(); } return ret; }
/ **
* テイクバイト[]配列から一部を
*
* @param SRC
* @param開始
* @param数
* @return
* /
{パブリック静的バイト[]のSubBytes(バイト[] srcは、開始INT、INTカウント) byte [] bs = new byte [count]; for(int i = begin; i <begin + count; i ++) bs [i-begin] = src [i]; return bs; }
// 16進コードを文字列に変換します publicstatic
String toStringHex(String s){ byte [] baKeyword = new byte [s.length()/ 2]; for(int i = 0; i <baKeyword.length; i ++){ try { baKeyword [i] =(byte)(0xff&Integer.parseInt(s.substring(i * 2、i * 2 + 2)、16)); } catch(Exception e){ e.printStackTrace( ); } }
try { s = new String(baKeyword、 "utf-8"); // UTF-16le:Not } catch(Exception e1){ e1.printStackTrace(); } return s; } / *****获取年份的后两位 * @ return * / public static String getYear(){ Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); 年=年-2000; 年を返す+ ""; } public static String month(){ Calendar calendar = Calendar.getInstance(); int月= calendar.get(Calendar.MONTH)+1;
戻り月<10? "0" + month:month + "";
}
public static String day(){ Calendar calendar = Calendar.getInstance(); int date = calendar.get(Calendar.DATE); 戻り日<10? "0" + date:date + ""; } public static String hour(){ Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.HOUR_OF_DAY); 戻り時間<10? "0" +時間:時間+ ""; } public static String minutes(){ Calendar calendar = Calendar.getInstance(); int分= calendar.get(Calendar.MINUTE); 分を返す<10? "0" +分:分+ ""; }
public static String second(){ Calendar calendar = Calendar.getInstance(); int second = calendar.get(Calendar.SECOND); return second <10? "0" + second:second + ""; } / ** * 16 16進数から2進数に変換 * @ param hex * @return * / public static int binary(String hex){ return Integer.parseInt(hex、16); } / ** * 2進数から16進数に変換 * @ param hex * @return * / public static String hex(int var){ if(var <0){ return "error"; }
文字列hex = Integer.toHexString(var);
if(var <= 15){ hex = "0" + hex; } 16進数を返します。 } public static String getLastMonthTime(){ Calendar calendar = Calendar.getInstance(); //calendar.add(Calendar.MONTH、-1); int year = calendar.get(Calendar.YEAR); int月= calendar.get(Calendar.MONTH)+1; int date = calendar.get(Calendar.DATE); int hour = calendar.get(Calendar.HOUR_OF_DAY); int分= calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND);
return year + "-" +(month <10? "0" + month:month)+ "-" +(date <10? "0" + date:date)+ "" +(hour <10? "0" +時間:時間)+ ":" +(分<10? "0" +分:分)+ ":" +(秒<10? "0" +秒:秒);
}
public static void main(String [] args){ String year = getLastMonthTime(); System.out.println(年); } / *** * 16進行制想加 * @ param hexdata * @return * / public static String makeChecksum(String hexdata){ if(hexdata == null || hexdata.equals( "")){ return "00" ; } hexdata = hexdata.replaceAll( ""、 ""); int total = 0;
int len = hexdata.length();
if(len%2!= 0){ return "00"; } int num = 0; while(num <len){ String s = hexdata.substring(num、num + 2); 合計+ = Integer.parseInt(s、16); num = num + 2; } return hexInt(total); } private static String hexInt(int total){ int a = total / 256; int b =合計%256; if(a> 255){ return hexInt(a)+ format(b); } return format(a)+ format(b); }
private static String format(int hex){ Stringhexa = Integer.toHexString(hex); int len = hexa.length(); if(len <2){ hexa = "0" +ヘキサ; } ヘキサを返す; }
/ ***
バイト配列から16進数
へ
* @ parambytes変換されるバイト配列 * @ return変換された16進文字列
* /
public static String bytesToHex(byte [] bytes){
StringBuffer sb = new StringBuffer();
for(int i = 0; i <bytes.length; i ++){
String hex = Integer.toHexString(bytes [i]&0xFF);
if(hex.length()<2){
sb.append(0);
}
sb.append(hex);
}
return sb.toString();
}
/ ***
バイトから16進数 * @ paramb
変換されるバイト
* @ return変換後の16進文字列
* /
public static String byteToHex(byte b){
String hex = Integer.toHexString(b&0xFF);
if(hex.length()<2){
hex = "0" + hex;
}
16進数を返します。
}
/ ***
16進文字列から バイト * @ paraminHex変換さ
れる 16進文字列
* @ return変換されたバイト
* 16進文字列は16進文字でなければならないことに注意してください。そうでない場合、例外がスローされます。 。Hexの範囲は0x00から0xFFです
* /
public static byte hexToByte(String inHex){
return(byte)Integer.parseInt(inHex、16);
}
/ **
* hex文字列からバイト配列
* @ paraminHex変換されるHex String
* @ return変換されたバイト配列の結果
* /
public static byte [] hexToByteArray(String inHex){
int hexlen = inHex.length();
byte [] result;
if(hexlen%2 == 1){
//奇妙な
hexlen ++;
結果=新しいバイト[(hexlen / 2)];
inHex = "0" + inHex;
} else {
//偶数
結果=新しいバイト[(hexlen / 2)];
}
int j = 0;
for(int i = 0; i <hexlen; i + = 2){
result [j] = hexToByte(inHex.substring(i、i + 2));
j ++;
}
結果を返します。
}
}