001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 * 019 */ 020 package org.apache.directory.shared.asn1.util; 021 022 023 import java.io.UnsupportedEncodingException; 024 025 026 /** 027 * Little helper class. 028 * 029 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> 030 * @version $Rev: 664290 $, $Date: 2008-06-07 08:28:06 +0200 (Sat, 07 Jun 2008) $ 031 */ 032 public class Asn1StringUtils 033 { 034 // ~ Static fields/initializers 035 // ----------------------------------------------------------------- 036 037 /** Hex chars */ 038 private static final byte[] HEX_CHAR = new byte[] 039 { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; 040 041 /** 042 * The empty byte[] 043 */ 044 public static final byte[] EMPTY_BYTES = new byte[] 045 {}; 046 047 // ~ Methods 048 // ------------------------------------------------------------------------------------ 049 050 /** 051 * Helper function that dump a byte in hex form 052 * 053 * @param octet 054 * The byte to dump 055 * @return A string representation of the byte 056 */ 057 public static String dumpByte( byte octet ) 058 { 059 return new String( new byte[] 060 { '0', 'x', HEX_CHAR[( octet & 0x00F0 ) >> 4], HEX_CHAR[octet & 0x000F] } ); 061 } 062 063 064 /** 065 * Helper function that dump an array of bytes in hex form 066 * 067 * @param buffer 068 * The bytes array to dump 069 * @return A string representation of the array of bytes 070 */ 071 public static String dumpBytes( byte[] buffer ) 072 { 073 if ( buffer == null ) 074 { 075 return ""; 076 } 077 078 StringBuffer sb = new StringBuffer(); 079 080 for ( byte b:buffer ) 081 { 082 sb.append( "0x" ).append( ( char ) ( HEX_CHAR[( b & 0x00F0 ) >> 4] ) ).append( 083 ( char ) ( HEX_CHAR[b & 0x000F] ) ).append( " " ); 084 } 085 086 return sb.toString(); 087 } 088 089 090 /** 091 * Return UTF-8 encoded byte[] representation of a String 092 * 093 * @param string 094 * The string to be transformed to a byte array 095 * @return The transformed byte array 096 */ 097 public static byte[] getBytesUtf8( String string ) 098 { 099 if ( string == null ) 100 { 101 return new byte[0]; 102 } 103 104 try 105 { 106 return string.getBytes( "UTF-8" ); 107 } 108 catch ( UnsupportedEncodingException uee ) 109 { 110 return new byte[] 111 {}; 112 } 113 } 114 115 /** 116 * Thansform a string to an array of ASCII bytes, where the byte array will contain 117 * only values in [0, 127]. 118 * 119 * @param string The byte array to transform 120 * @return The resulting string 121 */ 122 public static byte[] asciiStringToByte( String string ) 123 { 124 if ( ( string == null ) || ( string.length() == 0 ) ) 125 { 126 return EMPTY_BYTES; 127 } 128 129 byte[] result = new byte[string.length()]; 130 131 for ( int i = 0; i < result.length; i++ ) 132 { 133 result[i] = (byte)string.charAt( i ); 134 } 135 136 return result; 137 } 138 }