Commit 2b868086 authored by Chen Bill's avatar Chen Bill

EncodeUTF8: use unsigned operand

parent c4e24293
...@@ -61,34 +61,31 @@ public: ...@@ -61,34 +61,31 @@ public:
static int EncodeUTF8(const wchar_t * wsrc, char * str) { static int EncodeUTF8(const wchar_t * wsrc, char * str) {
char* pstr = str; char* pstr = str;
while(*wsrc != 0) { while(*wsrc != 0) {
if(*wsrc < 0x80) { unsigned cur = *wsrc;
*str = (char)*wsrc; if(cur < 0x80) {
*str = (char)cur;
++str; ++str;
} else if(*wsrc < 0x800) { } else if(cur < 0x800) {
str[0] = ((*wsrc >> 6) & 0x1f) | 0xc0; str[0] = ((cur >> 6) & 0x1f) | 0xc0;
str[1] = ((*wsrc) & 0x3f) | 0x80; str[1] = (cur & 0x3f) | 0x80;
str += 2; str += 2;
} else if(*wsrc < 0x10000 && (*wsrc < 0xd800 || *wsrc > 0xdfff)) { } else if(cur < 0x10000 && (cur < 0xd800 || cur > 0xdfff)) {
str[0] = ((*wsrc >> 12) & 0xf) | 0xe0; str[0] = ((cur >> 12) & 0xf) | 0xe0;
str[1] = ((*wsrc >> 6) & 0x3f) | 0x80; str[1] = ((cur >> 6) & 0x3f) | 0x80;
str[2] = ((*wsrc) & 0x3f) | 0x80; str[2] = (cur & 0x3f) | 0x80;
str += 3; str += 3;
} else { } else {
if (sizeof(wchar_t) == 2) { if (sizeof(wchar_t) == 2) {
unsigned unicode = 0; cur = 0;
unicode |= (*wsrc++ & 0x3ff) << 10; cur |= ((unsigned)*wsrc & 0x3ff) << 10;
unicode |= *wsrc & 0x3ff; ++wsrc;
unicode += 0x10000; cur |= (unsigned)*wsrc & 0x3ff;
str[0] = ((unicode >> 18) & 0x7) | 0xf0; cur += 0x10000;
str[1] = ((unicode >> 12) & 0x3f) | 0x80;
str[2] = ((unicode >> 6) & 0x3f) | 0x80;
str[3] = ((unicode) & 0x3f) | 0x80;
} else {
str[0] = ((*wsrc >> 18) & 0x7) | 0xf0;
str[1] = ((*wsrc >> 12) & 0x3f) | 0x80;
str[2] = ((*wsrc >> 6) & 0x3f) | 0x80;
str[3] = ((*wsrc) & 0x3f) | 0x80;
} }
str[0] = ((cur >> 18) & 0x7) | 0xf0;
str[1] = ((cur >> 12) & 0x3f) | 0x80;
str[2] = ((cur >> 6) & 0x3f) | 0x80;
str[3] = (cur & 0x3f) | 0x80;
str += 4; str += 4;
} }
wsrc++; wsrc++;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment