2013-03-09 3 views
2

Как преобразовать массив байтов в двоичный массив на Java-карте, чтобы получить результат как 10101010?Как преобразовать целое число в двоичный символ в Java-карту?

RandomData random_data = 
    RandomData.getInstance(RandomData.ALG_SECURE_RANDOM); 
// the seed is supplied in the byte array seed 
random_data.setSeed(sseed, seed_offset, seed_length); 
// a random number is written into the byte array random_num 
random_data.generateData(random_num, random_num_offset, 
         random_num_length); 
+0

И в JC контексте 'num' имеет тип' short'? – martijno

+0

имеет тип байт –

+0

Почему вы хотите иметь массив бит? Вы хотите выполнять определенные операции над битами? –

ответ

1

Байт-массив уже представляет собой двоичное представление набора битов (как, например, короткий массив). Единственное отличие от битового массива состоит в том, что вы всегда получите бит в наборах из 8, и вы не можете адресовать каждый бит отдельно, не выполняя некоторые побитовые операции.

Обычно представление битов в String (фрагмент текста) не выполняется на карточке. Он выполняется после того, как биты передаются в приложение на терминале. Возможно, вы заметили отсутствие типа String на классической карте Java.


Как запрошено некоторый способ преобразования битджей (бит на голландском языке) в символы для Java-карты. Спасибо за загадку.

/** 
* Converts an array of bytes, used as a container for bits, into an ASCII 
* representation of those bits. 
* 
* @param in 
*   the input buffer 
* @param inOffset 
*   the offset of the bits in the input buffer 
* @param bitSize 
*   the number of bits in the input buffer 
* @param out 
*   the output buffer that will contain the ASCII string 
* @param outOffset 
*   the offset of the first digit in the output buffer 
* @return the offset directly after the last ASCII digit 
*/ 
public static final short toBitjes(final byte[] in, short inOffset, 
     final short bitSize, final byte[] out, short outOffset) { 
    for (short i = 0; i < bitSize; i++) { 
     final byte currentByte = in[inOffset + i/BYTE_SIZE]; 
     out[outOffset++] = (byte) (0x30 + ((currentByte >> (7 - (i % BYTE_SIZE))) & 1)); 
    } 
    return outOffset; 
} 

Не стесняйтесь переименовывать «битджы», конечно.


Использование:

// buffer containing 9 bits valued 10011001.1 in middle of buffer 
final byte[] inBuffer = new byte[] { 0x00, (byte) 0x99, (byte) 0x80, 0x00 }; 
final short bitSize = 9; 
// bit array starting at byte 1 
final short inOffset = 1; 

// or use JCSystem#makeTransientByteArray() 
final byte[] outBuffer = new byte[40]; 
// ASCII start at offset 2 
final short outOffset = 2; 

// newOffset will be 2 + 9 = 11 
short newOffset = toBitjes(inBuffer, inOffset, bitSize, outBuffer, outOffset); 
+0

Вы можете легко перевести массив байтов в ASCII-представление бит (я рад предоставить код), но это, вероятно, не то, что вам нужно. –

+0

Буду рад, если вы дадите мне эту часть кода. –

+0

Я дам вам угадать значение 'BYTE_SIZE'. Он должен быть «коротким» 8OP –