如何将四个一字节的数转换为一个四字节数

最近在研究图像显示这块,想在/dev/graphics/fb0上显示图像,在研究时需要一个图片的十六进制数值,找了好久,找了一个软件可以实现该功能。

    Img2Lcd.exe 这个软件可以实现,一张图片转换后的结果如下:

const unsigned char gImage_1233[128640] = { /* 0X00,0X20,0XF0,0X00,0X86,0X00,0X00,0XE4, */
0X5D,0X31,0X12,0X00,0X5D,0X31,0X12,0X00,0X5D,0X31,0X12,0X00,0X5D,0X31,0X0F,0X00,
0X5E,0X31,0X10,0X00,0X5D,0X2E,0X12,0X00,0X5D,0X2F,0X11,0X00,0X5E,0X31,0X0F,0X00,
0X62,0X33,0X14,0X00,0X64,0X36,0X16,0X00,0X67,0X39,0X17,0X00,0XA3,0X42,0X02,0X00,
0XA4,0X42,0X02,0X00,0XA4,0X42,0X02,0X00,0XA4,0X41,0X03,0X00,0XA7,0X42,0X03,0X00,
0XA3,0X42,0X06,0X00,0XA5,0X44,0X02,0X00,0XAB,0X41,0X04,0X00,0XA7,0X44,0X03,0X00, 。。。。};

看到了吗?是char类型的,可是我要的是int类型的,可惜这个软件没有这个功能,如何是好呢。于是自己写了个简单的文件操作代码,在这个转换基础之上转换在做处理,代码如下:

 1 /*************************************************************************
 2     > File Name: main.c
 3     > Author: winfu
 4     > Mail: [email protected]
 5     > Created Time: Thu 07 Jul 2016 10:08:36 AM CST
 6  ************************************************************************/
 7 #include<stdio.h>
 8 #include<string.h>
 9 #include <sys/types.h>
10 #include <sys/stat.h>
11 #include <fcntl.h>
12
13 int main()
14 {
15     int fd1 = open("./file.txt",O_RDWR);
16     int fd2 = open("./file_bak.txt",O_CREAT|O_WRONLY,0666);
17     int num;
18     if(fd1 < 0 || fd2 < 0)
19     {
20         perror("open");
21         return -1;
22     }
23     ssize_t res = 1;
24     char buf4[4] = {0};
25     char buf2[2] = {0};
26     int i = 0;
27     char c = ‘,‘;
28     char cn = ‘\n‘;
29     printf("------------\n");
30     do{
31             i++;
32             res = read(fd1,buf4,sizeof(buf4));
33             printf("%s",buf4);
34             write(fd2,buf4,sizeof(buf4));
35
36             lseek(fd1, 3,SEEK_CUR);
37             res = read(fd1,buf2,sizeof(buf2));
38             printf("%s",buf2);
39             write(fd2,buf2,sizeof(buf2));
40
41             lseek(fd1, 3,SEEK_CUR);
42             res = read(fd1,buf2,sizeof(buf2));
43             printf("%s",buf2);
44             write(fd2,buf2,sizeof(buf2));
45
46             lseek(fd1, 3,SEEK_CUR);
47             res = read(fd1,buf2,sizeof(buf2));
48             printf("%s\t",buf2);
49             write(fd2,buf2,sizeof(buf2));
50             write(fd2,&c,1);
51             lseek(fd1, 1,SEEK_CUR);
52             num++;
53             if(i==4)
54             {
55                 i = 0;
56                 printf("\n");
57                 write(fd2,&cn,1);
58                 lseek(fd1, 1,SEEK_CUR);
59             }
60     }while(res);
61     printf("------------\n");
62     printf("num = %d\n",num);
63     close(fd1);
64     close(fd2);
65     return 0;
66 }

将转Img2Lcd.exe转换好的文件去掉头尾 存放到file.txt文档中,将file文档放在该程序的路径下,最后生成file_bak.txt,该文件存放的是转换后的数据:

0X5D311200,0X5D311200,0X5D311200,0X5D310F00,
0X5E311000,0X5D2E1200,0X5D2F1100,0X5E310F00,
0X62331400,0X64361600,0X67391700,0XA3420200,
0XA4420200,0XA4420200,0XA4410300,0XA7420300,
0XA3420600,0XA5440200,0XAB410400,0XA7440300,
0XA9440300,0XAC420500,0XA9440300,0XA8440300,
0XA9450400,0XA3460400,0XAC460500,0XA9450900 ….

这个数据正好是我想要的4字节。

  

时间: 2024-12-17 19:34:24

如何将四个一字节的数转换为一个四字节数的相关文章

ACM将一个十进制的数转换为一个十六进制的数输出

Description 把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示. Input 每行一个整数x,0<= x <= 2^31. Output 每行输出对应的八位十六进制整数,包括前导0. Sample Input 0 1023 Sample Output 0x00000000 0x000003FF   解题思路:我们把一个十进制的数转换为一个八位十六进制数只需在输出用%.8X就可以了.然后我们在每一次输出一个八位十六进制数之前都输出一个0x字符串就可以了. 程序

将给定的数转换为指定位的数

/*** 将给定的数转换为指定位的数* @param maxmum 最大位* @param minmum 最小位* @param num 返回转换后的数* @return*/public String formatNum(int maxmum,int minmum,int num){ NumberFormat nf = NumberFormat.getInstance();  nf.setGroupingUsed(false);// 设置此格式中是否使用分组. nf.setMaximumInte

4位bcd数转换为2进制数

DATA   SEGMENTBUF    DW  1234HBUF1   DW  ?    ;2进制数放到buf1内存单元DATA   ENDSCODE   SEGMENTASSUME CS:CODE,DS:DATABEGIN: MOV AX,DATA       MOV DS,AX       MOV DX,BUF       CALL DISC       MOV AH,4CH       INT 21H       DISC PROC       XOR  AX,AX       MOV 

将网络流中用两个字节16进制表示的资源数(如DNS)和长度转换为整形

由于在网上搜索一直没有找到结果,而直接用指针强制转换的方法,却会导致高八位和第八位倒过来的错误,于是冥思苦想自己写了一个 思想大致如下: 用u_int16_t的2字节16位的整形变量来存储这个整数,首先将第一个字节和该变量进行或运算,运算结果左移八位,于是刚才的第一个字节结果就到了高八位,然后在与第二个字节进行或运算尽可以了代码如下: u_int16_t convert16(u_char *p) { u_int16_t tmp = 0; tmp |= p[0]; tmp <<= 8; tmp

Unicode其实是Latin1的扩展。只有一个低字节的Uncode字符其实就是Latin1字符——附各种字符编码表及转换表

一.概念 1,ASCII ASCII(American Standard Code for Information Interchange),中文名称为美国信息交换标准代码.是基于拉丁字母的一套电脑编码系统.它主要用于显示现代英语和其他西欧语言.它是现今最通用的单字节编码系统.ASCII码又分为标准ASCII码和扩展ASCII码. 标准ASCII码.标准ASCII 码也叫基础ASCII码,使用7 位二进制数来表示所有的大写和小写字母,数字0 到9.标点符号, 以及在美式英语中使用的特殊控制字符.

javascript将10进制数转换为2进制

javascript中将10进制数转换为2进制有两种方式 一种是直接用toString(2)这个方法,一种是自己写一个方法换算,以下是代码: var num = 11; var str = num.toString(2); /*将十进制数转变为二进制数*/ function dec2bin(num){ var result = ""; if(num == 0){ return "0"; } while(num > 0){ result = num % 2 +

字和字节和位和16进制数的关系

字 word 字节 byte 位 bit 字长是指字的长度 1字=2字节(1 word = 2 byte) 1字节=8位(1 byte = 8bit)  一个字的字长为16 一个字节的字长是8 两个16进制数! 一个字节八个比特,就是八个二进制位   0000 0000     0x00-0xFF (十进制0-255) 四个二进制数最大表示为15,就是一个16进制数,所以八位可以表示成两个16进制的数!

Oracle中,将毫秒数转换为timestamp类型的两种方法

在许多场景中,开发人员习惯用1970-01-01 00:00:00.000以来的毫秒数来表示具体的时间,这样可以将数据以NUMBER类型存储到数据库中,在某些时候方便比较,同样,有些时候我们需要 把这种毫秒数转换成标准的TIMESTAMP类型,现在总结了两种实现方法: 方法一: SELECT TO_TIMESTAMP('1970-01-01 00:00:00.000','yyyy-MM-dd hh24:mi:ss.ff3')+1397457489296/1000/60/60/24 FROM du

java中从1970-1-1到当前时间之间的毫秒数转换为oracle date

java中System.currentTimeMillis()取到的是从1970-01-01 00:00:00.000到当前时间的毫秒数,一个long类型的值. 现在oracle数据库中某表中存取的是该值,需要将其转换为可读的date类型. current millis 中提供了TimeMillis的转换结果以及一些常用的转换方法. 但是其中关于pl/sql取得的数是精确到千毫秒,而不是精确到毫秒. 整理了一个包来进行currentTimeMillis到date的转换. 注意:System.cu