标题:
如何把0x20015ca8这个数转化为C语言数组?
[打印本页]
作者:
yxyxyxyx
时间:
2022-10-12 09:48
标题:
如何把0x20015ca8这个数转化为C语言数组?
能不能把这个数转化为a[len]={a,b,c,d,e,f.........l,m,n................}这种形式,长度不限,都可以的。
作者:
coody_sz
时间:
2022-10-12 10:54
一个整型数,你是要拆分几个字节放数组里?
作者:
yzwzfyz
时间:
2022-10-12 11:06
先按你的想法建立一个数组。
再将0x20015ca8按你的想法拆解开来。
最后放入你建立的数组中。
作者:
Y_G_G
时间:
2022-10-12 14:11
你还不如说你要干嘛,直接问问题本身
而不是想当然的觉得,一个问题应该要"这样"解决,然后就问怎么做
0x20015ca8是一个数
数组是一堆数
这两者之间没有等号关系,或者是说一点关系都没有,那要怎么转换呢?
100块钱你要换一堆钱,你总得说是要五毛的还是一块的吧?
作者:
名字不是重点
时间:
2022-10-12 15:46
unsigned int arr16[2]; 双字节数组
unsigned char arr8[4];单字节数组
unsigned char arr4[8];半字节数组
void main()
{
unsigned long num;
unsigned char i;
num=0x20015ca8;
for(i=0;i<2;i++)
{
arr16[1-i]=(int)num ;
num>>=16;
}
num=0x20015ca8;
for(i=0;i<4;i++)
{
arr8[3-i]=(char)num ;
num>>=8;
}
num=0x20015ca8;
for(i=0;i<8;i++)
{
arr4[7-i]=(char)num&0x0f;
num>>=4;
}
while(1);
}
作者:
名字不是重点
时间:
2022-10-12 15:47
就这么简单。
作者:
我未曾来过
时间:
2022-10-12 16:59
我按照你的字面意思来理解,你是想把0x20015ca8,转换成{0x20,0x01,0x5c......}这种的对吗,你用先按位与,再位移的办法就行。0xAABB>>8得到0xAA,0xAABB&0xFF得到0xBB,更长的也是同理的
作者:
Hephaestus
时间:
2022-10-12 19:51
楼主另一个帖子已经说明了是想把这个数拆成字节经由iic收发,把地址赋值给一个字符指针char*,然后操作这个指针就行了。位移运算是没有必要的,也浪费时间。
作者:
我未曾来过
时间:
2022-10-13 07:58
我以为他是想转化出一个数组,不知道后续还要干什么
作者:
624353765
时间:
2022-10-13 08:49
本来就是数组,何必要去拆分呢
long num=0x20015ca8;
char*str=&num;
char a=str[0];
作者:
624353765
时间:
2022-10-13 08:53
更直接的操作
long num=0x20015ca8;
char a=((char*)num)[1];
作者:
624353765
时间:
2022-10-13 09:05
结构体用法
union str{
long num;
char c_num[4];
}
num n;
n.num=0x20015ca8;
char a=n.c_num[0];
作者:
624353765
时间:
2022-10-13 09:29
qq624353765 发表于 2022-10-13 08:53
更直接的操作
long num=0x20015ca8;
char a=((char*)num)[1];
有个小错误
char a=((char*)&num)[1];
作者:
冯特洛夫斯基
时间:
2022-10-13 10:55
/*
十六进制数据改写为C语言数组形式
如:
0111
022222
03333333
生成:
{0x01,0x11},
{0x02,0x22,0x22},
{0x03,0x33,0x33,0x33},
如果第一个数为数据长度信息,第二个数为地址,其他为数据
如:
0111
022222
03333333
生成:
{0x01,0x01,0x11},
{0x02,0x02,0x22,0x22},
{0x03,0x03,0x33,0x33,0x33},
*/
#include <stdio.h>
#include <string.h>
int main(void)
{
FILE *fp = NULL;
int count = 0;
int num = 0;
int num2 = 0;
int num3 = 0;
int num4 = 0;
char buf[16000] = {}; //存储原来的数据
char buf2[16000] = {}; //原来的数据加上每行的数据个数
char result[16000] = {}; //改写为C语言数组形式。
fp = fopen("str.txt", "r");
if (fp == NULL) {
printf("open str.txt err!\n");
return -1;
}
count = fread(buf, sizeof(char), sizeof(buf), fp);
printf("read %d bytes\n", count);
if (count < 0) {
printf("read err!\n");
return -1;
}
fclose(fp);
/* 每行前面两个数据为该行有效16进制数据的长度,不需要长度信息,可以把下面这段屏蔽掉 */
#if 1
num2 += 2;
num3 = 0;
while(num < count) {
while(buf[num] != '\n') {
buf2[num2] = buf[num];
num2++;
num++;
}
if (buf[num] == '\n') {
buf2[num2] = buf[num];
num4 = (num2 - num3 - 1) / 2 - 1;
if (num4 / 16 >= 10)
buf2[num3] = num4 / 16 % 10 + 'A';
else
buf2[num3] = num4 / 16 + '0';
if (num4 % 16 >= 10)
buf2[num3+1] = num4 % 16 % 10 + 'A';
else
buf2[num3+1] = num4 % 16 + '0';
printf("num=%d, num2=%d, num3=%d, num4=%d\n", num, num2, num3, num4);
num3 = num2 + 1;
num2 += 3;
num++;
}
}
memset(buf, 0, sizeof(buf));
memcpy(buf, buf2, sizeof(buf));
printf("buf = %s\n", buf);
count = num2;
num = 0;
num2 = 0;
num3 = 0;
num4 = 0;
#endif
result[0] = '{';
result[1] = '0';
result[2] = 'x';
num2 = 3;
while (num < count) {
num3++;
if (buf[num] == '\n') {
num3 = 0;
result[num2++] = '}';
result[num2++] = ',';
result[num2++] = buf[num];
result[num2++] = '{';
result[num2++] = '0';
result[num2++] = 'x';
num++;
continue;
}
if (num3 <= 2) {
result[num2++] = buf[num];
}
if (num3 == 2) {
if (buf[num+1] != '\n') {
result[num2++] = ',';
result[num2++] = '0';
result[num2++] = 'x';
}
num3 = 0;
}
num++;
}
fp = fopen("result.txt", "w+");
if (fp == NULL) {
printf("open result.txt err!\n");
return -1;
}
count = fwrite(result, 1, num2+1, fp);
printf("write %d bytes\n", count);
if (count < 0) {
printf("write result.txt err!\n");
return -1;
}
fclose(fp);
return 0;
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1