308|4

810

帖子

0

TA的资源

纯净的硅(高级)

 

C语言中 如何低代码实现 LONG型变量 与数组之间的转换 [复制链接]

邀请:@led2015   @vincentc543   @吾妻思萌   @wangerxian   参与回复

C语言中 如何低代码实现 LONG型变量 与数组之间的转换,具体要求如下

 

1 、 将 long 型 变量 NUM 的数值  按16进制 形式存入  数组的 函数 比如  NUM=0X123456789ABCDEF0  存入数组 A[9] 后  A[0]=0X12     A[1]=0X34      A[2]=0X56      A[3]=0X78    A[4]=0X9A      A[5]=0XBC      A[6]=0XDE      A[7]=0XF0  
      相反有没有函数能将 A[0]-A[7] 的内容 转到 long型变量  num中 
2 、    将 long 型 变量 NUM 的数值  按压缩BCD码的 形式存入  数组的 函数 比如 NUM=1234567890  存入数组 A[9] 后  A[0]=12     A[1]=34      A[2]=56      A[3]=78    A[4]=90   
      相反有没有函数能将 A[0]-A[7] 的中的压缩BCD码的内容 转到 long型变量  num中 
 

除法编译后生成的最终的代码大太,如何减小编译后生成的编代码的数量 ,请大家特别注意一下。谢谢大家。

此帖出自stm32/stm8论坛

最新回复

//gcc 7.4.0 #include <stdio.h> #define LONG_TO_BUF(long,buf) {buf[0] = (long&0xff000000) >> 24;\ buf[1] = (long&0x00ff0000) >> 16;\ buf[2] = (long&0x0000ff00) >> 8;\ buf[3] = (long&0x000000ff);} int main(void) { unsigned char mydata[4] = {0}; long num = 0xaabbccdd; LONG_TO_BUF(num,mydata); printf("0x%x\n",mydata[0]); printf("0x%x\n",mydata[1]); printf("0x%x\n",mydata[2]); printf("0x%x\n",mydata[3]); return 0; }     详情 回复 发表于 2023-8-31 17:04
 

回复

127

帖子

0

TA的资源

一粒金砂(高级)

 

1.  数组转long

unsigned long  num ;

unsigned  char A[8] ={0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0} ;

 num = *(unsigned long*)A ;

// 数组A 的数值顺序和编译器的字节序有关,也可能顺序要反过来

 

此帖出自stm32/stm8论坛

赞赏

1

查看全部赞赏

 
 

回复

5077

帖子

4

TA的资源

版主

 
本帖最后由 damiaa 于 2023-9-1 00:33 编辑

楼上指针的方式很巧妙。也可以下面这样比较好理解。

 

1 、 将 long 型 变量 NUM 的数值  按16进制 形式存入  数组的 函数 比如  NUM=0X123456789ABCDEF0  存入数组 A[9] 后  A[0]=0X12     A[1]=0X34      A[2]=0X56      A[3]=0X78    A[4]=0X9A      A[5]=0XBC      A[6]=0XDE      A[7]=0XF0  

这个移位就行

 unsigned long x=0X123456789ABCDEF0;

 for(uint8_t i=0;i<=7;i++)

   { a[7-i] =x&0xff;x>>=8;}

      相反有没有函数能将 A[0]-A[7] 的内容 转到 long型变量  num中 

unsigned long x=0;

 for(uint8_t i=0;i<8;i++)

{   

    x |= a ;x<<=8;

}


2 、    将 long 型 变量 NUM 的数值  按压缩BCD码的 形式存入  数组的 函数 比如 NUM=1234567890  存入数组 A[9] 后  A[0]=12     A[1]=34      A[2]=56      A[3]=78    A[4]=90   
      相反有没有函数能将 A[0]-A[7] 的中的压缩BCD码的内容 转到 long型变量  num中 

long 变量先转变位压缩bcd码然后再像上面一样整。

此帖出自stm32/stm8论坛
 
 

回复

2

帖子

1

TA的资源

一粒金砂(初级)

 

直接类型强制转换也可以吧,比方说:for(x=0;x<8;x++)NUM += ((unsigned long)(A[x]))<<(8*x);   具体看实际情况,就写了一下大概思路,不知道符不符合你的要求

此帖出自stm32/stm8论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

 
//gcc 7.4.0

#include  <stdio.h>

#define LONG_TO_BUF(long,buf) {buf[0] = (long&0xff000000) >> 24;\
                               buf[1] = (long&0x00ff0000) >> 16;\
                               buf[2] = (long&0x0000ff00) >> 8;\
                               buf[3] = (long&0x000000ff);}


int main(void)
{
    unsigned char mydata[4] = {0};
    long num = 0xaabbccdd;
    LONG_TO_BUF(num,mydata);
    
    printf("0x%x\n",mydata[0]);
    printf("0x%x\n",mydata[1]);
    printf("0x%x\n",mydata[2]);
    printf("0x%x\n",mydata[3]);
    return 0;
}

 

此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

猜你喜欢
随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2023 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表