首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javacard中将十六进制字符串转换为字节数组

在javacard中将十六进制字符串转换为字节数组
EN

Stack Overflow用户
提问于 2016-12-22 19:35:24
回答 0查看 694关注 0票数 2

我有一个名为'hexa‘的字节数组,它经过一些处理后产生了数组'hexa1’。packPDU返回字符形式的十六进制字符串数组。我希望'hexa1‘的格式如下,这样它们就可以被解释为数字:

代码语言:javascript
复制
byte[] hexa1 =  { (byte) 0x0F, (byte) 0xAA, (byte) 0x5C, (byte) 0x4E, (byte) 0x45 ,(byte) 0xA3, (byte) 0XA9, (byte) 0x68};

下面是我使用的代码:

代码语言:javascript
复制
package com.bittest;



public class aditya1 {
public static void main(String[] args) {

    byte[] hexa = {'A','9', 'G', 'F', 'B', 'C', 'D', 'E', '5', '1'};
    byte[] gsm= convertUnicode2GSM(hexa);
    byte [] dst=new byte[gsm.length];
    byte[]  packed_array = packPDU(gsm, (short) 0, dst, (short) 0, (short) dst.length) ;

     byte[] hexa1 = new byte [(short)(packed_array.length/2)];
     for(short i =0; i<(short)((packed_array.length/2)-1); i++){
       hexa1[(short)(i+1)] = (byte)((short)(16*hexa[(short)(2*i+1)]) + (short)(hexa[(short)(2*i+2)]));
    }



}

public static byte[] convertUnicode2GSM(byte[] msg) {
       byte[] data = new byte[160];
       short j=0;
       for (short i = 0; i <(short) msg.length; i++) {
       switch (msg[i]) {
       case (byte)'@':  data[j] = 0x00; j++; break;
       case (byte)'$':  data[j] = 0x02; j++;break;
       case (byte)'\n': data[j] = 0x0A; j++;break;
       case (byte)'\r': data[j] = 0x0D; j++;break;
       case (byte)'_':  data[j] = 0x11; j++;break;
       //case (byte) 'ß':  data[j] = 0x1E; j++;break;
       case (byte)' ':  data[j] = 0x20; j++;break;
       case (byte)'!':  data[j] = 0x21; j++;break;

       case (byte) '\"': data[j] = 0x22; j++;break;
       case (byte)'#':  data[j] = 0x23; j++;break;
       case (byte)'%':  data[j] = 0x25; j++;break;
       case (byte)'&':  data[j] = 0x26; j++;break;
       case (byte)'\'': data[j] = 0x27; j++;break;
       case (byte)'(':  data[j] = 0x28; j++;break;
       case (byte)')':  data[j] = 0x29; j++;break;
       case (byte) '*':  data[j] = 0x2A; j++;break;
       case (byte)'+':  data[j] = 0x2B; j++;break;
       case (byte)',':  data[j] = 0x2C; j++;break;
       case (byte)'-':  data[j] = 0x2D; j++;break;
       case (byte) '.':  data[j] = 0x2E; j++;break;
       case (byte)'/':  data[j] = 0x2F; j++;break;
       case (byte)'0':  data[j] = 0x30; j++;break;
       case (byte)'1':  data[j] = 0x31; j++;break;
       case (byte)'2':  data[j] = 0x32; j++;break;
       case (byte)'3':  data[j] = 0x33; j++;break;
       case (byte)'4':  data[j] = 0x34; j++;break;
       case (byte)'5':  data[j] = 0x35; j++;break;
       case (byte)'6':  data[j] = 0x36; j++;break;
       case (byte)'7':  data[j] = 0x37; j++;break;
       case (byte)'8':  data[j] = 0x38; j++;break;
       case(byte) '9':  data[j] = 0x39; j++;break;
       case (byte)':':  data[j] = 0x3A; j++;break;
       case (byte)';':  data[j] = 0x3B; j++;break;
       case (byte)'<':  data[j] = 0x3C; j++;break;
       case (byte)'=':  data[j] = 0x3D; j++;break;
       case (byte)'>':  data[j] = 0x3E; j++;break;
       case (byte)'?':  data[j] = 0x3F; j++;break;
       case (byte)'A':  data[j] = 0x41; j++;break;
       case (byte)'B':  data[j] = 0x42; j++;break;
       case (byte)'C':  data[j] = 0x43; j++;break;
       case (byte)'D':  data[j] = 0x44; j++;break;
       case (byte)'E':  data[j] = 0x45; j++;break;
       case (byte)'F':  data[j] = 0x46; j++;break;
       case (byte)'G':  data[j] = 0x47; j++;break;
       case (byte)'H':  data[j] = 0x48; j++;break;
       case (byte)'I':  data[j] = 0x49; j++;break;
       case (byte)'J':  data[j] = 0x4A; j++;break;
       case (byte)'K':  data[j] = 0x4B; j++;break;
       case (byte)'L':  data[j] = 0x4C; j++;break;
       case (byte)'M':  data[j] = 0x4D; j++;break;
       case (byte)'N':  data[j] = 0x4E; j++;break;
       case (byte)'O':  data[j] = 0x4F; j++;break;
       case (byte)'P':  data[j] = 0x50; j++;break;
       case (byte)'Q':  data[j] = 0x51; j++;break;
       case (byte)'R':  data[j] = 0x52; j++;break;
       case (byte)'S':  data[j] = 0x53; j++;break;
       case (byte)'T':  data[j] = 0x54; j++;break;
       case (byte)'U':  data[j] = 0x55; j++;break;
       case (byte)'V':  data[j] = 0x56; j++;break;
       case (byte)'W':  data[j] = 0x57; j++;break;
       case (byte)'X':  data[j] = 0x58; j++;break;
       case (byte)'Y':  data[j] = 0x59; j++;break;
       case (byte)'Z':  data[j] = 0x5A; j++;break;
     //  case (byte) 'Ü':  data[j] = 0x5E; j++;break;
     //  case (byte) '§':  data[j] = 0x5F; j++;break;
       case (byte)'a':  data[j] = 0x61; j++;break;
       case (byte)'b':  data[j] = 0x62; j++;break;
       case (byte) 'c':  data[j] = 0x63; j++;break;
       case (byte)'d':  data[j] = 0x64; j++;break;
       case (byte)'e':  data[j] = 0x65; j++;break;
       case (byte)'f':  data[j] = 0x66; j++;break;
       case (byte)'g':  data[j] = 0x67; j++;break;
       case (byte)'h':  data[j] = 0x68; j++;break;
       case (byte)'i':  data[j] = 0x69; j++;break;
       case (byte)'j':  data[j] = 0x6A; j++;break;
       case (byte)'k':  data[j] = 0x6B; j++;break;
       case (byte)'l':  data[j] = 0x6C; j++;break;
       case (byte)'m':  data[j] = 0x6D; j++;break;
       case (byte)'n':  data[j] = 0x6E; j++;break;
       case (byte)'o':  data[j] = 0x6F; j++;break;
       case (byte)'p':  data[j] = 0x70; j++;break;
       case (byte)'q':  data[j] = 0x71; j++;break;
       case (byte)'r':  data[j] = 0x72; j++;break;
       case (byte)'s':  data[j] = 0x73; j++;break;
       case (byte)'t':  data[j] = 0x74; j++;break;
       case (byte)'u':  data[j] = 0x75; j++;break;
       case (byte)'v':  data[j] = 0x76; j++;break;
       case (byte)'w':  data[j] = 0x77; j++;break;
       case (byte)'x':  data[j] = 0x78; j++;break;
       case (byte)'y':  data[j] = 0x79; j++;break;
       case (byte)'z':  data[j] = 0x7A; j++;break;
       case (byte) '|':
                        data[j] = 0x1B; 
                        j +=1;
                        data[j] = 0x40;

                        j++;
                        break;


       default:   data[j] = 0x3F; j++;break; // '?'
       }  // switch
       }  // for
       return data;

       }  // convertUnicode2GSM

public static byte[] packPDU(byte[] src, short offsetSrc, byte[] dst, short offsetDst, short length) {

    short countSrc = (short) 0;
    short countDst = (short) 0;
    short countCurrent;
    byte leftover = (byte) 0;

    while (countSrc < length) {
        countCurrent = (byte) (countSrc & 7);
        if (countCurrent == 0) {
            leftover = src[(short) (offsetSrc)];
        } else {
            dst[offsetDst] = (byte) ((src[offsetSrc] << (8 - countCurrent)) | leftover);
            leftover = (byte) (src[offsetSrc] >> countCurrent);
            offsetDst++;
            countDst++;
        }
        countSrc++;
        offsetSrc++;
    }

    if ((length % 8) != 0) {
        dst[offsetDst] = leftover;
        countDst++;
    }

    return dst;
}

}

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41282249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档