注册 登录
编程论坛 C++教室

UTF8<>Hexadecimal 转换

DAVID78766 发布于 2016-09-08 17:16, 1429 次点击
大家好,小弟目前使用Dev C++ 5.11

目前想透过程式

读取一个UTF8文字档

然后转出成Hex code的文字档  但输出一样是UTF8编码

同时也可以逆向操作  读取Hex code的文字档  转成原来的内容

也就是此图的1.txt跟2.txt互转:
只有本站会员才能查看附件,请 登录


请问这部分的程式码该如何撰写呢?

感谢!!

[此贴子已经被作者于2016-9-8 18:20编辑过]

1 回复
#2
rjsp2016-09-09 09:14
不就是 'a'变61,61变'a'嘛,和UTF8没关系
从binary text document中读取一个个字节,转化为两个字符带一个空格,……
从你所谓的很么hexcode text document中读取一个个两长度的字符串,转化为一个字节,……

程序代码:
#include <stdio.h>
#include <assert.h>

void b2h( const char* b, char* h )
{
    const char* map_ = "0123456789ABCDEF";

    for( ; *b; ++b )
    {
        *h++ = map_[(unsigned char)*b/0x10];
        *h++ = map_[(unsigned char)*b%0x10];
        *h++ = ' ';
    }
    *h = '\0';
}

void h2b( const char* h, char* b )
{
    while( *h )
    {
        unsigned char sp = 0;
        for( size_t i=0; i!=2; ++h, ++i )
        {
            assert( *h );
            switch( *h )
            {
            case '0': case '1': case '2': case '3': case '4':
            case '5': case '6': case '7': case '8': case '9':
                sp = (sp*0x10) | (*h-'0');
                break;
            case 'A': case 'B': case 'C':
            case 'D': case 'E': case 'F':
                sp = (sp*0x10) | (*h-'A'+10);
                break;
            default:
                assert( 0 );
            }
        }
        *b++ = sp;

        if( !*h ) break;
        assert( *h == ' ' );
        ++h;
    }
    *b = '\0';
}

int main( void )
{
    {
        const char* bincode = "a中b";
        char hexcode[100];
        b2h( bincode, hexcode );
        puts( hexcode ); // 输出 61 D6 D0 62
    }

    {
        const char* hexcode = "61 D6 D0 62";
        char bincode[100];
        h2b( hexcode, bincode );
        puts( bincode ); // a中b
    }
}

1