将char数据转换成hex的格式

有时候,我们需要将char型的数据,转换成hex的形式,啥都不说,直接上代码。

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

#define CHAR_FILE	"./char.txt"
#define HEX_FILE	"./hex.txt"

int main( int argc, char** argv )
{
	int	char_fd = 0;
	int	hex_fd	= 0;

	int	read_ret	= 0;
	int	send_len	= 0;
	int	rcv_len		= 0;
	int	hex_len		= 0;

	int		ret		= 0;
	unsigned char	*send_buffer	= NULL;
	unsigned char	*raw_buffer	= NULL;

	char_fd = open( CHAR_FILE, O_RDWR | O_NONBLOCK );

	if ( char_fd < 0 )
	{
		printf( "char file open fail\n" );
		close( char_fd );
		return(0);
	}

	hex_fd = open( HEX_FILE, O_RDWR | O_NONBLOCK );

	if ( hex_fd < 0 )
	{
		printf( "hex file open fail\n" );
		close( hex_fd );
		return(0);
	}

	printf( "**************************\n" );
	printf( "********start ipc test****\n" );
	printf( "**************************\n" );

	send_len = lseek( char_fd, 0L, SEEK_END );
	lseek( char_fd, 0L, SEEK_SET );
	printf( "char.txt len = %d\n", send_len );

	send_buffer = (unsigned char *) malloc( send_len );
	if ( send_buffer == NULL )
	{
		printf( "send_buffer malloc error\n" );
		close( char_fd );
		close( hex_fd );
		return(-1);
	}

	memset( send_buffer, 0, (size_t) send_len );

	do
	{
		rcv_len = read( char_fd, send_buffer, send_len );
		if ( rcv_len < 0 )
		{
			printf( "read fail\n" );
			free( send_buffer );
			close( char_fd );
			close( hex_fd );
			return(-1);
		}
	}
	while ( rcv_len == 0 );

	printf( "have readed char.txt len = %d\n", rcv_len );
	hex_len		= rcv_len / 2;
	raw_buffer	= (unsigned char *) malloc( hex_len );
	if ( raw_buffer == NULL )
	{
		printf( "raw_buffer malloc error\n" );
		close( char_fd );
		close( hex_fd );
		free( send_buffer );
		return(-1);
	}

	int i = 0;
	for ( i = 0; i < hex_len; i++ )
	{
		sscanf( send_buffer + i * 2, "%2X", raw_buffer + i );
	}

	free( send_buffer );

	ret = write( hex_fd, raw_buffer, hex_len );
	if ( ret < 0 )
	{
		printf( "write fail\n" );
		free( raw_buffer );
		close( char_fd );
		close( hex_fd );
		return(-1);
	}
	printf( "have write len = %d\n", ret );

	printf( "**************************\n" );
	printf( "********end ipc test******\n" );
	printf( "**************************\n" );

	lseek( hex_fd, 0L, SEEK_SET );

	free( raw_buffer );
	close( hex_fd );
	close( char_fd );
	return(0);
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值