@@ -313,7 +313,8 @@ namespace utflib
313
313
for (size_t j = 0 ; j < src_len;) {
314
314
if (src[j] == 0 ) break ;
315
315
u32str += char_utf32 (src, u8char, j, number_of_byte);
316
- j += number_of_byte;
316
+ if (number_of_byte) j += number_of_byte;
317
+ else ++j;
317
318
}
318
319
return u32str.c_str ();
319
320
}
@@ -346,9 +347,11 @@ namespace utflib
346
347
char u8char[5 ]{};
347
348
int32_t number_of_byte;
348
349
349
- for (size_t j = 0 ;; j += number_of_byte ) {
350
+ for (size_t j = 0 ;;) {
350
351
if (src[j] == 0 ) break ;
351
352
u32str += char_utf32 (src, u8char, j, number_of_byte);
353
+ if (number_of_byte) j += number_of_byte;
354
+ else ++j;
352
355
}
353
356
return u32str.c_str ();
354
357
}
@@ -455,12 +458,29 @@ namespace utflib
455
458
return u16str.c_str ();
456
459
}
457
460
461
+ // SJIS(char) から UTF-16(char16_t*)へ
462
+ const char16_t * utf16_s (const char src)
463
+ {
464
+ static std::u16string u16str;
465
+ u16str = u" " ;
466
+
467
+ const uint8_t src_8 = uint8_t (src);
468
+
469
+ if (src_8 <= 127 ) u16str += char16_t (src);
470
+ else if (src_8 >= 161 && src_8 <= 223 ) u16str += char16_t (src_8 - 161 ) + 0xff61 ;
471
+
472
+ return u16str.c_str ();
473
+ }
474
+
458
475
// SJIS(string) から UTF-16(char16_t*)へ
459
476
const char16_t * utf16_s (const std::string src) { return utf16_s (src.c_str ()); }
460
477
461
478
// SJIS(char*) から UTF-8(char*)へ
462
479
const char * utf8_s (const char * src) { return utf8 (utf16_s (src)); }
463
480
481
+ // SJIS(char) から UTF-8(char*)へ
482
+ const char * utf8_s (const char src) { return utf8 (utf16_s (src)); }
483
+
464
484
// SJIS(string) から UTF-8(char*)へ
465
485
const char * utf8_s (const std::string src) { return utf8 (utf16_s (src.c_str ())); }
466
486
@@ -470,4 +490,23 @@ namespace utflib
470
490
// SJIS(string) から UTF-32(char*)へ
471
491
const char32_t * utf32_s (const std::string src) { return utf32 (utf16_s (src.c_str ())); }
472
492
493
+ // SJIS(char) から UTF-32(char32_t*)へ
494
+ const char32_t * utf32_s (const char src) { return utf32 (utf16_s (src)); }
495
+
496
+ // 数値 から UTF-8(char*)へ
497
+ template <typename type_name>
498
+ const char * utf8 (type_name src) {
499
+ static std::string u8str;
500
+ u8str = std::to_string (src);
501
+ return u8str.c_str ();
502
+ }
503
+
504
+ // 数値 から UTF-16(char16_t*)へ
505
+ template <typename type_name>
506
+ const char16_t * utf16 (type_name src) { return utf16 (utf8 (src)); }
507
+
508
+ // 数値 から UTF-32(char32_t*)へ
509
+ template <typename type_name>
510
+ const char32_t * utf32 (type_name src) { return utf32 (utf8 (src)); }
511
+
473
512
}
0 commit comments