2016-04-07 4 views
-3

Ich muss eine Variable auf einer JavaCard speichern. JavaCards unterstützen keine Strings, daher muss ich einige String-Variablen als Byte-Arrays fest codieren. Leider weiß ich nicht, wie man dieses Format zu erreichen:Hardcode-String auf einer Javacard

new byte[]{0x4A, 0x61, 0x6E, 0x20, 0x56, 0x6F, 0x73, 0x73, 0x61, 0x65, 0x72, 0x74}; 

Gibt es ein Online-Tool zur Verfügung? Oder gibt es ein Programm, das es auf diese Weise ausgibt, damit ich die Ausgabe kopieren und diese für das Hardcoding verwenden kann?

+1

Das Beispiel [im Wikipedia-Artikel] (https://en.wikipedia.org/wiki/Java_Card#Hello_World_Program) kodiert Strings als char-Literale: '{'H', 'E', 'L', 'L ',' O '' '- das ist viel einfacher zu lesen. –

Antwort

1

Verwenden Sie einfach String::getBytes():

String a = "HelloWorld"; 
byte[] inBytes = a.getBytes(); 
System.out.println(Arrays.toString(inBytes)); 

OUTPUT:

[72, 101, 108, 108, 111, 87, 111, 114, 108, 100] 

IDEONE DEMO


ADD ON: als @AndyTurner erwähnt, können Sie spezi fy Zeichensatz mit String::getBytes(Charset). Finden Sie here eine nette Erklärung.

+0

Wie bekomme ich das Format in System.out.println() ;? – yoano

+0

benötigt dieses Format: neues byte [] {0x4A, 0x61, 0x6E, 0x20, 0x56, 0x6F, 0x73, 0x73, 0x61, 0x65, 0x72, 0x74}; – yoano

+1

Überprüfen Sie mein Update –

2

Sie benötigen kein Werkzeug dafür. Wenn Sie eine Zeichenfolge in dem Applet im Applet Entwicklungsschritt gespeichert werden sollen (ich meine in der Programmierphase) verwenden, um einen Byte-Array wie folgt:

public static byte[] myFiled = {(byte)'T', (byte)'E', (byte)'S', (byte)'T'}; 

oder Hex-Werte anstelle der Buchstaben:

public static byte[] myFiled = {(byte)0x10, (byte)0x11, (byte)0x12, (byte)0x13}; 

es ist notwendig, um die Array-Elemente zu gieße Byte explizit

Und wenn Sie die Zeichenfolge nach der Entwicklung in der Installation des Applet gespeichert werden sollen, zunächst auf seinen hex-Wert konvertiert es this online tool for example mit und senden Sie sie dann an die Karte im Datenfeld eines APDU-Befehls. Und dann mit arrayCopy oder arrayCopyNonAtomic Methoden speichern Sie es in Ihrem Byte-Array.

0

Hier ist eine Methode zum Konvertieren einer Zeichenfolge in ein Array-Literal, die US-ASCII – codierten Bytes darstellt.

static String format(String str) 
{ 
    byte[] encoded = str.getBytes(StandardCharsets.US_ASCII); 
    return IntStream.range(0, encoded.length) 
    .mapToObj(idx -> String.format("0x%02X", encoded[idx])) 
    .collect(Collectors.joining(", ", "{ ", " }")); 
} 

Weil es ASCII verwendet, ist das hohe Bit jedes Bytes Null und keine downcasts zu byte erforderlich.

Verwandte Themen