1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru**********************************************************************
350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*   Copyright (C) 2001-2009, International Business Machines
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Corporation and others.  All Rights Reserved.
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru**********************************************************************
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Date        Name        Description
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   05/23/00    aliu        Creation.
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru**********************************************************************
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/unistr.h"
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "testutil.h"
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UChar HEX[16]={48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70};
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString &TestUtility::appendHex(UnicodeString &buf, UChar32 ch) {
1750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (ch >= 0x10000) {
1850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        if (ch >= 0x100000) {
1950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            buf.append(HEX[0xF&(ch>>20)]);
2050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        }
2150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        buf.append(HEX[0xF&(ch>>16)]);
2250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    }
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    buf.append(HEX[0xF&(ch>>12)]);
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    buf.append(HEX[0xF&(ch>>8)]);
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    buf.append(HEX[0xF&(ch>>4)]);
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    buf.append(HEX[0xF&ch]);
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return buf;
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
3050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString TestUtility::hex(UChar32 ch) {
3150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString buf;
3250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    appendHex(buf, ch);
3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    return buf;
3450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
3550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString TestUtility::hex(const UnicodeString& s) {
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return hex(s, 44 /*,*/);
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUnicodeString TestUtility::hex(const UnicodeString& s, UChar sep) {
4150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UnicodeString result;
4250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    if (s.isEmpty()) return result;
4350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    UChar32 c;
4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    for (int32_t i = 0; i < s.length(); i += U16_LENGTH(c)) {
4550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        c = s.char32At(i);
4650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        if (i > 0) {
4750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            result.append(sep);
4850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        }
4950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho        appendHex(result, c);
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    return result;
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}
5350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
5450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoUnicodeString TestUtility::hex(const uint8_t* bytes, int32_t len) {
5550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho	UnicodeString buf;
5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho	for (int32_t i = 0; i < len; ++i) {
5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho		buf.append(HEX[0x0F & (bytes[i] >> 4)]);
5850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho		buf.append(HEX[0x0F & bytes[i]]);
5950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho	}
6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho	return buf;
6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
62