标题:UTF8<>Hexadecimal 转换
只看楼主
DAVID78766
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-9-8
结帖率:0
已结贴  问题点数:20 回复次数:1 
UTF8<>Hexadecimal 转换
大家好,小弟目前使用Dev C++ 5.11

目前想透过程式

读取一个UTF8文字档

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

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

也就是此图的1.txt跟2.txt互转:


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

感谢!!

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

2016-09-08 17:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
不就是 '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
    }
}

2016-09-09 09:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-468619-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.195705 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved