Decodes four bytes from array source and writes the resulting bytes (up to three of them) to destination . The source and destination arrays can be manipulated anywhere along their length by specifying srcOffset and destOffset . This method does not check to
(byte[] source, int srcOffset, byte[] destination, int destOffset)
| 2219 | * @since 1.3 |
| 2220 | */ |
| 2221 | private static int decode4to3(byte[] source, int srcOffset, byte[] destination, int destOffset) { |
| 2222 | // Example: Dk== |
| 2223 | if(source[srcOffset + 2] == EQUALS_SIGN) { |
| 2224 | // Two ways to do the same thing. Don't know which way I like best. |
| 2225 | //int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) |
| 2226 | // | ( ( DECODABET[ source[ srcOffset + 1] ] << 24 ) >>> 12 ); |
| 2227 | int outBuff=((DECODABET[source[srcOffset]] & 0xFF) << 18) |
| 2228 | | ((DECODABET[source[srcOffset + 1]] & 0xFF) << 12); |
| 2229 | |
| 2230 | destination[destOffset]=(byte)(outBuff >>> 16); |
| 2231 | return 1; |
| 2232 | } |
| 2233 | |
| 2234 | // Example: DkL= |
| 2235 | else if(source[srcOffset + 3] == EQUALS_SIGN) { |
| 2236 | // Two ways to do the same thing. Don't know which way I like best. |
| 2237 | //int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) |
| 2238 | // | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 ) |
| 2239 | // | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 ); |
| 2240 | int outBuff=((DECODABET[source[srcOffset]] & 0xFF) << 18) |
| 2241 | | ((DECODABET[source[srcOffset + 1]] & 0xFF) << 12) |
| 2242 | | ((DECODABET[source[srcOffset + 2]] & 0xFF) << 6); |
| 2243 | |
| 2244 | destination[destOffset]=(byte)(outBuff >>> 16); |
| 2245 | destination[destOffset + 1]=(byte)(outBuff >>> 8); |
| 2246 | return 2; |
| 2247 | } |
| 2248 | |
| 2249 | // Example: DkLE |
| 2250 | else { |
| 2251 | try { |
| 2252 | // Two ways to do the same thing. Don't know which way I like best. |
| 2253 | //int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6 ) |
| 2254 | // | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 ) |
| 2255 | // | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 ) |
| 2256 | // | ( ( DECODABET[ source[ srcOffset + 3 ] ] << 24 ) >>> 24 ); |
| 2257 | int outBuff=((DECODABET[source[srcOffset]] & 0xFF) << 18) |
| 2258 | | ((DECODABET[source[srcOffset + 1]] & 0xFF) << 12) |
| 2259 | | ((DECODABET[source[srcOffset + 2]] & 0xFF) << 6) |
| 2260 | | ((DECODABET[source[srcOffset + 3]] & 0xFF)); |
| 2261 | |
| 2262 | |
| 2263 | destination[destOffset]=(byte)(outBuff >> 16); |
| 2264 | destination[destOffset + 1]=(byte)(outBuff >> 8); |
| 2265 | destination[destOffset + 2]=(byte)(outBuff); |
| 2266 | |
| 2267 | return 3; |
| 2268 | } |
| 2269 | catch(Exception e) { |
| 2270 | System.out.println(valueOf(source[srcOffset]) + ": " + (DECODABET[source[srcOffset]])); |
| 2271 | System.out.println(valueOf(source[srcOffset + 1]) + ": " + (DECODABET[source[srcOffset + 1]])); |
| 2272 | System.out.println(valueOf(source[srcOffset + 2]) + ": " + (DECODABET[source[srcOffset + 2]])); |
| 2273 | System.out.println(String.valueOf(source[srcOffset + 3]) + ": " + (DECODABET[source[srcOffset + 3]])); |
| 2274 | return -1; |
| 2275 | } //e nd catch |
| 2276 | } |
| 2277 | } // end decodeToBytes |
| 2278 |