有时候,我们需要将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;
}