void Run_desDes(char My_message[8], char HexMessage[16])// DES?????; { int i = 0; static bool Message_bit[64] = {0}; static bool* Message_bit_L = &Message_bit[0], * Message_bit_R = &Message_bit[32]; static bool Temp[32] = {0}; HexToBit
时间: 2023-06-26 20:03:22 浏览: 46
该函数看起来像是一个 DES 加密函数,它接受一个 8 字节的消息和一个 16 字节的十六进制消息作为输入。
在函数内部,它定义了一些变量和静态数组。其中 `Message_bit` 是一个 64 位长的静态布尔数组,用于存储消息的每个比特位。另外,`Message_bit_L` 和 `Message_bit_R` 分别指向 `Message_bit` 数组的前 32 位和后 32 位,这是因为 DES 算法是将 64 位的输入分成左右两部分进行处理。
函数中还定义了一个 `Temp` 数组,用于暂存一些计算中间结果。
最后,函数调用了一个名为 `HexToBit` 的函数,然而该函数在这段代码中并没有给出。从函数名来看,它可能是将十六进制数转换为位数组的函数。
综上,该函数的作用是将输入的 8 字节消息进行 DES 加密,并将结果存储在 `HexMessage` 数组中。
相关问题
#include <reg52.h> #include <stdio.h> #define LCD1602_RS P2_0 // LCD1602?RS?? #define LCD1602_RW P2_1 // LCD1602?RW?? #define LCD1602_EN P2_2 // LCD1602?EN?? #define LCD1602_DATAPINS P0 // LCD1602????? sbit UART_RXD = P3^0; // ?????? sbit UART_TXD = P3^1; // ?????? void init_uart() // ????? { TMOD |= 0x20; // ?????1???2 TH1 = 0xfd; // ??????9600 TL1 = 0xfd; TR1 = 1; // ?????1 SCON = 0x50; // ???????1 ES = 1; // ?????? EA = 1; // ????? } void init_lcd() // ???LCD { LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_EN = 0; delay_ms(15); lcd_write_cmd(0x38); // ??LCD?16x2????? delay_ms(5); lcd_write_cmd(0x0c); // ??LCD?? delay_ms(5); lcd_clear(); // ?? lcd_write_cmd(0x06); // ???????? } void lcd_write_cmd(unsigned char cmd) // ????LCD { LCD1602_RS = 0; LCD1602_DATAPINS = cmd; LCD1602_EN = 1; delay_us(2); LCD1602_EN = 0; delay_ms(1); } void lcd_write_data(unsigned char dat) // ????LCD { LCD1602_RS = 1; LCD1602_DATAPINS = dat; LCD1602_EN = 1; delay_us(2); LCD1602_EN = 0; delay_ms(1); } void lcd_clear() // ?? { lcd_write_cmd(0x01); } void lcd_set_cursor(unsigned char x, unsigned char y) // ?????? { unsigned char addr; if (y == 0) addr = 0x80 + x; else addr = 0xc0 + x; lcd_write_cmd(addr); } void lcd_puts(unsigned char x, unsigned char y, unsigned char *str) // ?????????? { lcd_set_cursor(x, y); while (*str != '\0') { lcd_write_data(*str); str++; } } void uart_isr() interrupt 4 // ???????? { if (RI) { RI = 0; lcd_write_data(SBUF); // ?????????LCD? } } void main() { init_uart(); init_lcd(); while (1); }
这段代码实现了一个基于单片机的串口通信并将接收到的数据显示在LCD1602液晶屏上。其中,P2_1和P2_2是定义了LCD1602的控制引脚,P0是定义了LCD1602数据引脚。同时,还定义了一个uart_isr()函数,用于处理串口接收中断。在main()函数中,通过调用init_uart()和init_lcd()函数初始化串口和LCD1602,然后进入一个死循环中。
需要注意的是,如果你在编译这段代码时出现了P2_1和P2_2未定义的错误提示,可能是因为你没有正确定义这些引脚或没有包含相应的头文件。你需要检查一下你的代码,确定是否有定义这些引脚,或者添加对应的头文件。
连续调用void send_log(const char *log),如何实现发送不丢失?
为了确保连续发送不会丢失数据,我们需要保证发送的数据都被串口接收方成功接收。一种简单的实现方法是,在发送数据后,通过串口接收方返回一个确认信息,告诉发送方数据已经成功接收。只有收到确认信息后,发送方才会继续发送下一部分数据。
以下是一个简单的示例代码,其中我们假设串口接收方发送了一个回应字符串 "OK" 来表示数据已经成功接收:
```c
#define MAX_BUFFER_SIZE 1024
#define SEND_DELAY_MS 10
void send_log(const char *log) {
int len = strlen(log);
int sent_len = 0;
char buffer[MAX_BUFFER_SIZE];
while (sent_len < len) {
int copy_len = len - sent_len;
if (copy_len > MAX_BUFFER_SIZE - 1) {
copy_len = MAX_BUFFER_SIZE - 1;
}
memcpy(buffer, &log[sent_len], copy_len);
buffer[copy_len] = '\0';
Uprintf(buffer);
// 等待一段时间后再检查是否有回应
delay(SEND_DELAY_MS);
// 检查是否有回应
char response[3];
int response_len = Uart_GetRxBufLen(DTC_UART);
if (response_len >= 2) {
Uart_Read(DTC_UART, response, 2);
response[2] = '\0';
if (strcmp(response, "OK") == 0) {
sent_len += copy_len;
}
}
}
}
```
在这个例子中,我们在发送数据后,等待一段时间后检查串口接收方是否有回应。如果有回应,我们检查回应字符串是否为 "OK",如果是,说明数据已经成功接收,我们就可以继续发送下一部分数据。如果没有回应或者回应字符串不为 "OK",我们会在下一轮循环中重新发送当前部分数据。这样做可以确保数据不会丢失。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)