顶风尿十丈 2022-06-24 22:02 采纳率: 100%
浏览 47
已结题

C语言对于字节位判断

c语言环境下
有一串8位的数组
例如:

0x55 0x00 0x4F 0x07 0x00 0x00 0x00 0x5C

转换为二进制就是

101010100000000010011110000011100000000000000000000000001011100

协议文档写明数据从低位到高位开始解析,从右往左
比如说第0位和第1位这两位数据表示传感器A的状态
第3位表示传感器B的状态
第4位和第5位又是两位来表示传感器C的状态
第五位第六位表示传感器D的状态
然后第7位又表示传感器N的状态
每一个传感器状态占用的位数不定,可能有的占一位,有的占两位

我想实现一个函数,传入这串数组,转换二进制后然后开始分析,
比如说传感器A 占用第0位开始2位,分别代表 开(01)、关(11)、停止(10)
传感器B占用第2位开始1位,分别是开(1)、关(0)
传感器C、D、E、F以此类推
传入数据,然后printf打印出每个传感器的状态

小生学艺不才,特来询问各位老 师,小生在此谢过各位老 师~

  • 写回答

1条回答 默认 最新

  • emXiaoMing 2022-06-24 22:41
    关注
    
    #include "stdio.h"
    #include "string.h"
    #include "stdlib.h"
    #pragma warning(disable:4996)
    
    void GetStatus(unsigned char* status)
    {
        long long allStatus = 0;
        int i = 0;
        char* sensorStatus = (char*)calloc(10, sizeof(char));
    
        for (; i < 8; i++)
        {
            allStatus |= (long long)status[7 - i] << i * 8;
        }
    
        switch (allStatus & 0x3)
        {
        case 1:
            strcpy(sensorStatus, "开");
            break;
        case 2:
            strcpy(sensorStatus, "停止");
            break;
        case 3:
            strcpy(sensorStatus, "关");
            break;
        default:
            strcpy(sensorStatus, "无此状态");
        }
        printf("传感器A为:%s\n", sensorStatus);
    
        switch ((allStatus & 0x4) >> 2)
        {
        case 1:
            strcpy(sensorStatus, "开");
            break;
        case 0:
            strcpy(sensorStatus, "关");
            break;
        default:
            strcpy(sensorStatus, "无此状态");
        }
        printf("传感器B为:%s\n", sensorStatus);
    }
    
    int main()
    {
        unsigned char status[8] = { 0x55,0x00,0x4f,0x07,0x00,0x00,0x00,0x5c };
        GetStatus(status);
    
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月3日
  • 已采纳回答 6月25日
  • 创建了问题 6月24日

悬赏问题

  • ¥15 对于这个问题的代码运行
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败