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