字符数组到十六进制等效的日语字符
Char array to hex equivalent for Japanese characters
任何人都知道如何在 C 编程中获取日文字符数组的十六进制,
任何库或函数都可以。
假设我的字符串是 "アイコン"
它的十六进制等价物是 EFBDB1EFBDB2EFBDBAEFBE9D
。
提前致谢。
根据您在问题中提供的信息判断,您的字符串似乎以 UTF-8.
编码
以十六进制表示打印空终止字符数组的内容很简单:
void print_string_as_hex( const char *str )
{
while ( *str != '[=10=]' )
{
printf( "%02X", (unsigned char)*str );
str++;
}
}
由于 UTF-8 格式的设计方式是永远不会对任何值为 0
的字节进行编码,因此您无需了解 UTF-8 编码的细节.您可以简单地假设,当遇到值为 0
的字节时,它一定是字符串的终止空字符。因此,您可以将数组视为包含固定长度的单字节字符编码。
虽然你在问题中没有提到这一点,但在评论部分,你提到你不想打印结果,而是想将十六进制表示写入字符串,这样你可以将它传递给另一个函数。这也很简单:
void write_string_as_hex( const char *str, char *hex )
{
while ( *str != '[=11=]' )
{
sprintf( hex, "%02X", (unsigned char)*str );
str += 1;
hex += 2;
}
}
但是,该函数有些危险,因为您必须确保缓冲区 hex
足够大以包含输出,否则会出现 buffer overflow。
因此,该函数的安全版本如下所示:
#include <stdio.h>
#include <stdbool.h>
//this function will return true on success, false on failure
bool write_string_as_hex( const char *str, char *hex, size_t hex_size )
{
size_t remaining = hex_size;
while ( *str != '[=12=]' )
{
//check if buffer size exceeded
if ( remaining < 3 )
return false;
//convert and verify that exactly 2 characters were written
if ( snprintf( hex, 3, "%02X", (unsigned char)*str ) != 2 )
return false;
//advance both pointers
str += 1;
hex += 2;
//update remaining buffer size
remaining -= 2;
}
return true;
}
任何人都知道如何在 C 编程中获取日文字符数组的十六进制, 任何库或函数都可以。
假设我的字符串是 "アイコン"
它的十六进制等价物是 EFBDB1EFBDB2EFBDBAEFBE9D
。
提前致谢。
根据您在问题中提供的信息判断,您的字符串似乎以 UTF-8.
编码以十六进制表示打印空终止字符数组的内容很简单:
void print_string_as_hex( const char *str )
{
while ( *str != '[=10=]' )
{
printf( "%02X", (unsigned char)*str );
str++;
}
}
由于 UTF-8 格式的设计方式是永远不会对任何值为 0
的字节进行编码,因此您无需了解 UTF-8 编码的细节.您可以简单地假设,当遇到值为 0
的字节时,它一定是字符串的终止空字符。因此,您可以将数组视为包含固定长度的单字节字符编码。
虽然你在问题中没有提到这一点,但在评论部分,你提到你不想打印结果,而是想将十六进制表示写入字符串,这样你可以将它传递给另一个函数。这也很简单:
void write_string_as_hex( const char *str, char *hex )
{
while ( *str != '[=11=]' )
{
sprintf( hex, "%02X", (unsigned char)*str );
str += 1;
hex += 2;
}
}
但是,该函数有些危险,因为您必须确保缓冲区 hex
足够大以包含输出,否则会出现 buffer overflow。
因此,该函数的安全版本如下所示:
#include <stdio.h>
#include <stdbool.h>
//this function will return true on success, false on failure
bool write_string_as_hex( const char *str, char *hex, size_t hex_size )
{
size_t remaining = hex_size;
while ( *str != '[=12=]' )
{
//check if buffer size exceeded
if ( remaining < 3 )
return false;
//convert and verify that exactly 2 characters were written
if ( snprintf( hex, 3, "%02X", (unsigned char)*str ) != 2 )
return false;
//advance both pointers
str += 1;
hex += 2;
//update remaining buffer size
remaining -= 2;
}
return true;
}