gpt4 book ai didi

在 C 中将 char * 转换为 unsigned char 数组

转载 作者:太空宇宙 更新时间:2023-11-04 02:28:10 25 4
gpt4 key购买 nike

我想优化我的代码并避免错误,我有这个功能可以“工作”,但我认为我可以改进并避免内存问题。

void function(char* message)
{
char * pointer;
unsigned char buffer[2048] = {0};
int buffer_len = 0;

memset(buffer, 0, sizeof(buffer));
strcpy(buffer, message);

buffer_len = strlen(buffer);
memset(buffer, 0, sizeof(&buffer));

for(int i = 0, pointer = message; i < (buffer_len / 2); i++, pointer += 2)
{
sscanf(pointer, "%02hhX", &buffer[i]);
}
}

函数的思路是接收一个“0123456789”这种风格的字符串,以unsigned char数组的形式传递给0x01,0x23,0x45,...。任何提示、良好实践或改进都会非常有用。

用法是这样的:

function("0123456789");

在函数缓冲区结束时:

buffer[0] = 0x01
buffer[1] = 0x23
...

最佳答案

有一些可能的优化。最大的优化来自避免做 2x memsetstrcpy,

不需要:

// memset(buffer, 0, sizeof(buffer)); 
// strcpy(buffer, message);
// memset(buffer, 0, sizeof(&buffer));

大大简化了代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void function(char* message)
{
unsigned char * pointer;
unsigned char buffer[2048]; // not needed = {0};
int buffer_half_len; // not needed = 0;

buffer_half_len = strlen(message)/2; // avoiding division in the for loop;
pointer = message;

for(int i = 0; i < buffer_half_len; i++, pointer += 2)
{
sscanf(pointer, "%02hhX", &buffer[i]);
printf("%02hhX\n", buffer[i] );
}
}

输出:

01
23
45
67
89

关于在 C 中将 char * 转换为 unsigned char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47838120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com