HexTranslator.java
上传用户:lior1029
上传日期:2013-05-07
资源大小:209k
文件大小:2k
源码类别:

CA认证

开发平台:

Java

  1. package org.bouncycastle.util.encoders;
  2. /**
  3.  * Converters for going from hex to binary and back. Note: this class assumes ASCII processing.
  4.  */
  5. public class HexTranslator
  6.     implements Translator
  7. {
  8.     private static final byte[]   hexTable = 
  9.         { 
  10.             (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7',
  11.             (byte)'8', (byte)'9', (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f'
  12.         };
  13.     /**
  14.      * size of the output block on encoding produced by getDecodedBlockSize()
  15.      * bytes.
  16.      */
  17.     public int getEncodedBlockSize()
  18.     {
  19.         return 2;
  20.     }
  21.     public int encode(
  22.         byte[]  in,
  23.         int     inOff,
  24.         int     length,
  25.         byte[]  out,
  26.         int     outOff)
  27.     {
  28.         for (int i = 0, j = 0; i < length; i++, j += 2)
  29.         {
  30.             out[outOff + j] = hexTable[(in[inOff] >> 4) & 0x0f];
  31.             out[outOff + j + 1] = hexTable[in[inOff] & 0x0f];
  32.             inOff++;
  33.         }
  34.         return length * 2;
  35.     }
  36.     /**
  37.      * size of the output block on decoding produced by getEncodedBlockSize()
  38.      * bytes.
  39.      */
  40.     public int getDecodedBlockSize()
  41.     {
  42.         return 1;
  43.     }
  44.     public int decode(
  45.         byte[]  in,
  46.         int     inOff,
  47.         int     length,
  48.         byte[]  out,
  49.         int     outOff)
  50.     {
  51. int halfLength = length / 2;
  52. byte left, right;
  53.         for (int i = 0; i < halfLength; i++)
  54.         {
  55. left  = in[inOff + i * 2];
  56. right = in[inOff + i * 2 + 1];
  57.             if (left < (byte)'a')
  58.             {
  59.                 out[outOff] = (byte)((left - '0') << 4);
  60.             }
  61.             else
  62.             {
  63.                 out[outOff] = (byte)((left - 'a' + 10) << 4);
  64.             }
  65.             if (right < (byte)'a')
  66.             {
  67.                 out[outOff] += (byte)(right - '0');
  68.             }
  69.             else
  70.             {
  71.                 out[outOff] += (byte)(right - 'a' + 10);
  72.             }
  73.             outOff++;
  74.         }
  75.         return halfLength;
  76.     }
  77. }