バイト配列は、すでに一連のビットのバイナリ表現です (短い配列と同様)。ビット配列との唯一の違いは、ビットを常に 8 個のセットで取得することと、ビット単位の操作を行わないと各ビットを個別にアドレス指定できないことです。
通常、a String
(テキストの一部) 内のビットの表現は、カードでは実行されません。ビットが端末上のアプリケーションに送信された後に実行されます。String
Java Card classicにタイプがないことに気付いたかもしれません。
bitjes (オランダ語のビット) を Java Card の文字に変換する方法をリクエストしました。パズルありがとう。
/**
* 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;
}
もちろん、「bitjes」の名前を自由に変更してください。
使用法:
// 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);