首页 > 其他分享 >数据转换-位串字节数组

数据转换-位串字节数组

时间:2024-06-06 15:13:02浏览次数:14  
标签:printf ba int 位串 unsigned char 数组 bs 字节

utils.c

#include "utils.h"

int Bitstr2ByteArr(unsigned char *bs, unsigned char *ba, int *lba) {
    int i, j;
    for (i = 0, j = 0; j < *lba; j++) {
        ba[j] = 0;
        for (int k = 0; k < 8; k++) {
            if (bs[i] == '1') {
                ba[j] |= (1 << (7 - k));
            } else if (bs[i] != '0') {
                return -1; // 非法字符
            }
            i++;
        }
    }

    return 0;
}

int ByteArr2Bitstr(unsigned char *ba, unsigned char *bs, int *lbs) {
    int i, j;
    for (i = 0, j = 0; i < *lbs; i++) {
        for (int k = 7; k >= 0; k--) {
            bs[j++] = ((ba[i] >> k) & 1) + '0';
        }
    }
    
    bs[j] = '\0';
    *lbs = j;
    return 0;
}

测试代码

#include "utils.h"
#include <stdio.h>

int main() {
    unsigned char bs[] = "1010010100011100";
    unsigned char ba[3] = {0};
    int len = 3;

    if (Bitstr2ByteArr(bs, ba, &len) == 0) {
        printf("结果:ba = \"%02X%02X%02X\"; len = %d\n", ba[0], ba[1], ba[2], len);
    } else {
        printf("位串转换为字节串出错\n");
    }

    unsigned char ba2[] = {0x05, 0x1C};
    unsigned char bs2[17] = {0};
    int len2 = 17;

    if (ByteArr2Bitstr(ba2, bs2, &len2) == 0) {
        printf("结果:bs = \"%s\"\n", bs2);
    } else {
        printf("字节串转换为位串出错\n");
    }

    return 0;
}


标签:printf,ba,int,位串,unsigned,char,数组,bs,字节
From: https://www.cnblogs.com/xuyuanqi/p/18235169

相关文章

  • js 数组各种常见的操作
    JavaScript中的数组提供了多种操作方法,以下是一些常见的数组操作示例:1创建数组javascriptconstnumbers=[1,2,3,4,5];2访问数组元素javascriptconsole.log(numbers[0]);//输出:13修改数组元素javascriptnumbers[0]=10;4数组长度javascriptc......
  • java:数组和集合(例如ArrayList)的对比
    问题:为什么java里有了array还要有arrayList?(相类比的:python里只有list没有array)答案:因为arrayList是对array的补充,更灵活实用。数组和arrayList都是一维的,但数组可以通过下标直接访问,arrayList只能通过遍历访问;数组能存储基本类型和对象,arrayList只能存对象;数组长度不可变,array......
  • java ArrayIndexOutOfBoundsException数组越界异常
    Java中的ArrayIndexOutOfBoundsException(数组越界异常)是一种运行时异常,表示访问了数组的非法索引位置。在数组中,索引从0开始,并以数组长度减一为上限。如果使用了小于0或大于等于数组长度的索引,就会抛出ArrayIndexOutOfBoundsException异常。以下是一个示例代码,演示了这个异常......
  • 信息学奥赛初赛天天练-20-完善程序-vector数组参数引用传递、二分中值与二分边界应用
    PDF文档公众号回复关键字:2024060512023CSP-J完善程序1完善程序(单选题,每小题3分,共计30分)原有长度为n+1,公差为1等升数列,将数列输到程序的数组时移除了一个元素,导致长度为n的开序数组可能不再连续,除非被移除的是第一个或最后之个元素。需要在数组不连续时,找出......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素(数组)
    第一次打卡,记录还不够充分,会慢慢丰富起来一、二分查找题目链接:704.二分查找-力扣(LeetCode)讲解链接:Carl讲解视频讲解:代码随想录讲解 情况1:左闭右闭区间情况2:左闭右开区间 二、移除元素题目链接:27.移除元素-力扣(LeetCode)讲解链接:Carl讲解视频讲解:代码随想......
  • js数组方法
    JavaScript中有许多数组方法,用于对数组进行操作、转换和处理。以下是一些常用的数组方法:1.遍历方法:  forEach:遍历数组中的每个元素,并对每个元素执行指定的操作。  map:对数组中的每个元素执行指定的操作,并返回操作后的新数组。map:map方法用于对数组中的每个元......
  • 代码随想录 数组总结
    数组总结主要包括二分法双指针滑动窗口模拟 二分法 循环不变量原则拓展考虑学习浮点数二分整数二分扩展题目双指针 快慢指针 原地解决问题、双向解决问题 滑动窗口滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置。从而将O(n^2)......
  • JVM之【字节码/Class文件/ClassFile 内容解析】
    说在前面的话Java语言:跨平台的语言(writeonce,runanywhere)当Java源代码成功编译成字节码后,如果想在不同的平台上面运行,则无须再次编译这个优势不再那么吸引人了。Python、PHP、Perl、Ruby、Lisp等有强大的解释器。跨平台似乎已经快成为一门语言必选的特性。Java虚拟......
  • NumPy 通用函数(ufunc):高性能数组运算的利器
    NumPy通用函数(ufunc)简介NumPy通用函数(ufunc),代表“通用函数”,是一类用于对ndarray对象进行逐元素运算的高性能函数。ufunc使NumPy能够在底层高效地利用C语言实现向量化操作,从而显著提高计算速度。优势ufunc的主要优势体现在以下几个方面:向量化操作:ufunc可以对整个......
  • day1.数组
    题目:https://leetcode.cn/problems/binary-search/submissions/537498050/代码随想录解析:https://programmercarl.com/0704.二分查找.html#思路并不熟悉区间不变,很容易写乱,一定要清晰的知道自己的边界。特别需要注意的是,如果为左闭右开,则while中的判断是<;如果为左闭右闭,......