您的位置:首页 > 健康 > 美食 > 桂林漓江阳朔一日游旅游攻略_web前端开发工程师(驻场银行)_nba最新排名东西部_怎么学做电商然后自己创业

桂林漓江阳朔一日游旅游攻略_web前端开发工程师(驻场银行)_nba最新排名东西部_怎么学做电商然后自己创业

2024/12/23 2:42:49 来源:https://blog.csdn.net/weixin_72688684/article/details/144529977  浏览:    关键词:桂林漓江阳朔一日游旅游攻略_web前端开发工程师(驻场银行)_nba最新排名东西部_怎么学做电商然后自己创业
桂林漓江阳朔一日游旅游攻略_web前端开发工程师(驻场银行)_nba最新排名东西部_怎么学做电商然后自己创业

文章目录

  • 商用密码标准实现
    • 简述 GM/T0009 4种数据转换的功能,根据你的理解,每种转换功能给出至少一个例子
    • 参考课程代码sdfproject,基于一个模块utils.c,utils.h使用四个函数分别实现4种数据转换的功能
    • src中在testsdf.c中编写main函数 测试四个转换功能。
    • 提交git log结果

商用密码标准实现

简述 GM/T0009 4种数据转换的功能,根据你的理解,每种转换功能给出至少一个例子

  • 位串转8位字节串

    • 功能:将由字符 '0''1' 组成的二进制位串转换为字节串(即字节数组)。每个字节由8个二进制位组成。
    • 例子:输入位串为 10000010,长度为8。转换后的字节串为 0x82(十六进制表示),对应的十进制值为 130
  • 字节串转位串

    • 功能:将字节串(即字节数组)转换回二进制位串表示。每个字节被分解为其构成的8个二进制位。
    • 例子:输入字节串为 {0x12, 0x34, 0x56}。转换后的位串为 000100100011010001010110
  • 字节串转整数

    • 功能:将一个字节串解释为一个大端序(Big-Endian)的无符号整数。字节串中的第一个字节是最显著的字节。
    • 例子:输入字节串为 {0x12, 0x34}。转换后的整数值为 0x1234(十六进制表示),对应的十进制值为 4660
  • 整数转字节串

    • 功能:将一个整数转换为指定长度的大端序(Big-Endian)字节串。如果整数不足以填满指定长度,则高位用零填充。
    • 例子:输入整数为 1234,期望的字节串长度为2。转换后的字节串为 {0x04, 0xd2}

参考课程代码sdfproject,基于一个模块utils.c,utils.h使用四个函数分别实现4种数据转换的功能

  • utils.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "utils.h"void bitstring_to_bytes(char *bitstring, int blen, char *bytes) {int mlen = (blen + 7) / 8;for (int i = 0; i < mlen; i++) {bytes[i] = 0;for (int j = 0; j < 8; j++) {int index = blen - 8 * (mlen - 1 - i) - j - 1;if (index >= 0 && bitstring[index] == '1') {bytes[i] |= 1 << j;}}}
}void bytes_to_bitstring(char *bytes, int mlen, char *bitstring) {int index = 0;for (int i = 0; i < mlen; ++i) {char binary[9];for (int j = 7; j >= 0; --j) {binary[7 - j] = ((bytes[i] & (1 << j))? '1' : '0');}binary[8] = '\0';for (int j = 0; j < 8; ++j) {bitstring[index++] = binary[j];}}bitstring[index] = '\0';
}unsigned int bytes_to_int(unsigned char *M, int mlen) {unsigned int x = 0;for (int i = 0; i < mlen; i++) {x += (1 << (8 * (mlen - 1 - i))) * M[i];}return x;
}void int_to_bytes(int x, int mlen, unsigned char *M) {for (int i = 0; i < mlen; i++) {M[i] = (x >> (8 * (mlen - 1 - i))) & 0xFF;}
}
  • utils.h
#ifndef _UTILS_H_
#define _UTILS_H_// 位串转8位字节串函数声明
void bitstring_to_bytes(char *bitstring, int blen, char *bytes);// 8位字节串转位串函数声明
void bytes_to_bitstring(char *bytes, int mlen, char *bitstring);// 8位字节串转整数函数声明
unsigned int bytes_to_int(unsigned char *M, int mlen);// 整数转8位字节串函数声明
void int_to_bytes(int x, int mlen, unsigned char *M);#endif

src中在testsdf.c中编写main函数 测试四个转换功能。

  • testsdf.c
#include <stdio.h>
#include <stdlib.h>
#include "utils.h"int main() {// 测试位串转8位字节串{char bitstring[] = "10000010";int blen = strlen(bitstring);char bytes[100];bitstring_to_bytes(bitstring, blen, bytes);int mlen = (blen + 7) / 8;printf("位串转8位字节串测试:\n");printf("原始位串: %s\n", bitstring);printf("转换后的字节串: ");for (int i = 0; i < mlen; i++) {printf("%02X ", (unsigned char)bytes[i]);}printf("\n\n");}// 测试8位字节串转位串{char bytes[] = {0x12, 0x34, 0x56};int mlen = sizeof(bytes) / sizeof(bytes[0]);char bitstring[100];bytes_to_bitstring(bytes, mlen, bitstring);printf("8位字节串转位串测试:\n");printf("原始字节串: ");for (int i = 0; i < mlen; i++) {printf("%02X ", (unsigned char)bytes[i]);}printf("\n转换后的位串: %s\n\n", bitstring);}// 测试8位字节串转整数{unsigned char M[] = {0x12, 0x34};int mlen = sizeof(M) / sizeof(M[0]);unsigned int x = bytes_to_int(M, mlen);printf("8位字节串转整数测试:\n");printf("原始字节串: ");for (int i = 0; i < mlen; i++) {printf("%02X ", (unsigned char)M[i]);}printf("\n转换后的整数: %u\n\n", x);}// 测试整数转8位字节串{int x = 1234;int mlen = 4;unsigned char M[100];int_to_bytes(x, mlen, M);printf("整数转8位字节串测试:\n");printf("原始整数: %d\n", x);printf("转换后的字节串: ");for (int i = 0; i < mlen; i++) {printf("%02X ", M[i]);}printf("\n\n");}return 0;
}
ld@DESKTOP-69L72QA:~/projects/sdfproject$ ./testsdf
Bit string to byte array test:
Original bit string: 10000010
Converted byte array: 82Byte array to bit string test:
Original byte array: 12 34 56
Converted bit string: 000100100011010001010110Byte array to integer test:
Original byte array: 12 34
Converted integer: 4660Integer to byte array test:
Original integer: 1234
Converted byte array: 00 00 04 D2

提交git log结果

ld@DESKTOP-69L72QA:~/projects/sdfproject$ git add .
ld@DESKTOP-69L72QA:~/projects/sdfproject$ git commit -m "sm"
[master eb4dc93] sm20 files changed, 317 insertions(+)create mode 100755 projects/sdfproject/Makefilecreate mode 100755 projects/sdfproject/bin/testcreate mode 100755 projects/sdfproject/bitstr2bytescreate mode 100755 projects/sdfproject/bytes2bitstrcreate mode 100755 projects/sdfproject/bytes2intcreate mode 100755 projects/sdfproject/compile.shcreate mode 100755 projects/sdfproject/docs/ref/GMT0018-2012.pdfcreate mode 100755 projects/sdfproject/include/.utils.h.swpcreate mode 100755 projects/sdfproject/include/sdf.hcreate mode 100755 projects/sdfproject/include/utils.hcreate mode 100755 projects/sdfproject/int2bytecreate mode 100755 projects/sdfproject/readme.mdcreate mode 100755 projects/sdfproject/src/sdf.ccreate mode 100755 projects/sdfproject/src/utils.ccreate mode 100755 projects/sdfproject/test/main.ccreate mode 100755 projects/sdfproject/testsdfcreate mode 100644 projects/sdfproject/testsdf.ccreate mode 100755 projects/sdfproject/utilscreate mode 100644 projects/sdfproject/utils.ccreate mode 100644 projects/sdfproject/utils.h
ld@DESKTOP-69L72QA:~/projects/sdfproject$ git log
commit eb4dc93452a684bb430ea427109a8c46bb5aacfd (HEAD -> master)
Author: <E6><9F><B3><E7><AC>11537298+liudi20221408@user.noreply.gitee.com>
Date:   Tue Dec 17 12:36:47 2024 +0800sm

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com