二进制,十进制,十六进制输出

Posted abc36725612

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二进制,十进制,十六进制输出相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<string.h>

int
unicode_to_utf( unsigned long unicode, unsigned char *utf )

    //assert( utf );
 
    int size = 0;
    if ( unicode <= 0x7F )
    
        *( utf + size++ ) = unicode & 0x7F;
    
    else if ( unicode >= 0x80 && unicode <= 0x7FF )
    
        *( utf + size++ ) = ( ( unicode >> 6 ) & 0x1F ) | 0xC0;
        *( utf + size++ ) = ( unicode & 0x3F ) | 0x80;
    
    else if ( unicode >= 0x800 && unicode <= 0xFFFF )
    
        *( utf + size++ ) = ( ( unicode >> 12 ) & 0x0F ) | 0xE0;
        *( utf + size++ ) = ( ( unicode >> 6  ) & 0x3F ) | 0x80;
        *( utf + size++ ) = ( unicode & 0x3F  ) | 0x80;
    
    else if ( unicode >= 0x10000 && unicode <= 0x10FFFF )
    
        *( utf + size++ ) = ( (unicode >> 18 ) & 0x7  ) | 0xF0;
        *( utf + size++ ) = ( (unicode >> 12 ) & 0x3F ) | 0x80;
        *( utf + size++ ) = ( (unicode >> 6  ) & 0x3F ) | 0x80;
        *( utf + size++ ) = ( unicode & 0x3F ) | 0x80;
    
    else if ( unicode >= 0x200000 && unicode <= 0x3FFFFFF )
    
        *( utf + size++ ) = ( (unicode >> 24 ) & 0x3  ) | 0xF8;
        *( utf + size++ ) = ( (unicode >> 18 ) & 0x3F ) | 0x80;
        *( utf + size++ ) = ( (unicode >> 12 ) & 0x3F ) | 0x80;
        *( utf + size++ ) = ( (unicode >> 6  ) & 0x3F ) | 0x80;
        *( utf + size++ ) = ( unicode & 0x3F ) | 0x80;
    
    else if ( unicode >= 0x4000000 && unicode <= 0x7FFFFFFF )
    
        *( utf + size++ ) = ( (unicode >> 30 ) & 0x1  ) | 0xFC;
        *( utf + size++ ) = ( (unicode >> 24 ) & 0x3F ) | 0x80;
        *( utf + size++ ) = ( (unicode >> 18 ) & 0x3F ) | 0x80;
        *( utf + size++ ) = ( (unicode >> 12 ) & 0x3F ) | 0x80;
        *( utf + size++ ) = ( (unicode >> 6  ) & 0x3F ) | 0x80;
        *( utf + size++ ) = ( unicode & 0x3F ) | 0x80;
    
    else
    
        printf( "Error : unknow scope\n" );
        return -1;
    
    *( utf + size ) = \0;
 
    return size;


void
utf_print( unsigned char *utf, int size )

    if ( size == -1 )
    
        printf( "unknow scope\n" );
        return;
    
 
    int index = 0;
    for ( ; index < size; index += 1 )
    
        printf( "%X",  *( utf + index) );
    
 
    printf( "\n" );


 int
main( int argc, char *argv[] )

    unsigned long unicode1 = 55;
    unsigned char utf[7] =  0 ;
    int size = unicode_to_utf( unicode1, utf );
    utf_print( utf, size );
 
    unsigned long unicode2 = 123;
    size = unicode_to_utf( unicode2, utf );
    utf_print( utf, size );
 
    memset( utf, 0x00, sizeof( utf ) );
    unsigned long unicode3 = 0x4E25;
    size = unicode_to_utf( unicode3, utf );
    utf_print( utf, size );
 
    memset( utf, 0x00, sizeof( utf ) );
    unsigned long unicode4 = 23456;
    size = unicode_to_utf( unicode4, utf );
    utf_print( utf, size );
 
    memset( utf, 0x00, sizeof( utf ) );
    unsigned long unicode5 = 234567;
    size = unicode_to_utf( unicode5, utf );
    utf_print( utf, size );
 
    memset( utf, 0x00, sizeof( utf ) );
    unsigned long unicode6 = 34561234;
    size = unicode_to_utf( unicode6, utf );
    utf_print( utf, size );
 
    /* error */
    memset( utf, 0x00, sizeof( utf ) );
    unsigned long unicode7 = 0x8FFFFFFF;
    size = unicode_to_utf( unicode7, utf );
    utf_print( utf, size );
 
    return 0;
[email protected]:/fdsk# gcc -o utf0 utf0.c
[email protected]:/fdsk# ./utf0
37
7B
E4B8A5
E5AEA0
F0B99187
FA83B5B392
Error : unknow scope
unknow scope

 

以上是关于二进制,十进制,十六进制输出的主要内容,如果未能解决你的问题,请参考以下文章

C语言 将99(十进制)转为0x99(十六进制)并输出?

Java 图片二进制数据转换成流输出请求解答

写一个函数,输入十进制数,输出相应的十六进制数

cout 二进制输出

Qt中将Qstring的内容输出为16进制

Fortran把字符型数据输出为二进制