1 /* 2 ********************************************************************** 3 * Copyright (C) 2001-2009, International Business Machines 4 * Corporation and others. All Rights Reserved. 5 ********************************************************************** 6 * Date Name Description 7 * 05/23/00 aliu Creation. 8 ********************************************************************** 9 */ 10 11 #include "unicode/unistr.h" 12 #include "testutil.h" 13 14 static const UChar HEX[16]={48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70}; 15 16 UnicodeString &TestUtility::appendHex(UnicodeString &buf, UChar32 ch) { 17 if (ch >= 0x10000) { 18 if (ch >= 0x100000) { 19 buf.append(HEX[0xF&(ch>>20)]); 20 } 21 buf.append(HEX[0xF&(ch>>16)]); 22 } 23 buf.append(HEX[0xF&(ch>>12)]); 24 buf.append(HEX[0xF&(ch>>8)]); 25 buf.append(HEX[0xF&(ch>>4)]); 26 buf.append(HEX[0xF&ch]); 27 return buf; 28 } 29 30 UnicodeString TestUtility::hex(UChar32 ch) { 31 UnicodeString buf; 32 appendHex(buf, ch); 33 return buf; 34 } 35 36 UnicodeString TestUtility::hex(const UnicodeString& s) { 37 return hex(s, 44 /*,*/); 38 } 39 40 UnicodeString TestUtility::hex(const UnicodeString& s, UChar sep) { 41 UnicodeString result; 42 if (s.isEmpty()) return result; 43 UChar32 c; 44 for (int32_t i = 0; i < s.length(); i += U16_LENGTH(c)) { 45 c = s.char32At(i); 46 if (i > 0) { 47 result.append(sep); 48 } 49 appendHex(result, c); 50 } 51 return result; 52 } 53 54 UnicodeString TestUtility::hex(const uint8_t* bytes, int32_t len) { 55 UnicodeString buf; 56 for (int32_t i = 0; i < len; ++i) { 57 buf.append(HEX[0x0F & (bytes[i] >> 4)]); 58 buf.append(HEX[0x0F & bytes[i]]); 59 } 60 return buf; 61 } 62