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 14static const UChar HEX[16]={48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70}; 15 16UnicodeString &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 30UnicodeString TestUtility::hex(UChar32 ch) { 31 UnicodeString buf; 32 appendHex(buf, ch); 33 return buf; 34} 35 36UnicodeString TestUtility::hex(const UnicodeString& s) { 37 return hex(s, 44 /*,*/); 38} 39 40UnicodeString 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 54UnicodeString 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