当前位置: 首页 > 知识库问答 >
问题:

在 C 中将字符 * 转换为无符号字符数组

阎功
2023-03-14

我想优化我的代码,避免错误,我有这个功能,但我认为我可以改善和避免内存问题。

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”并将其传递给0x01、0x23、0x45、...在无符号字符数组中。任何提示,良好的实践或改进将是非常有用的。

用法是这样的:

function("0123456789");

在函数缓冲区中结束如下:

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

共有2个答案

太叔鹏云
2023-03-14
char * a= -80; // let supposed you get returned value( i represented in int) from whatever source.
unsigned char b = * a; // now b equal the complemntry of -80 which will be 176
std::cout << b ;
东门俊民
2023-03-14

有一些可能的优化。最大的优化来自避免做2x内存集strcpy

无需:

// 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
 类似资料:
  • 我在尝试将未签名的 char 数组转换为 jstring 时遇到问题。 上下文是我正在使用来自Java的共享c库。所以我正在实现一个JNI c文件。我在库中使用的函数会恢复 我在 JNI C 文件中实现的函数返回一个 jstring。 所以我需要把无符号的char数组转换成jstring。 但是,尽管数组应该只包含20个字节,但我在Java中随机得到22或23个字节......(虽然 20 个字节

  • 问题内容: 在Java中,是否有一种简单而优雅的方法将无符号字节值转换为有符号字节值?例如,如果我所拥有的只是int值240(二进制(24位+ 11110000)= 32bits),如何获得该int的带符号值? 问题答案: 除了,Java没有其他无符号值。考虑以下代码段: 结果将为-1,因为最低的8位已复制到byte变量中。

  • 问题内容: 我想将a转换为Character类的对象数组,但无法执行转换。我知道我可以使用该方法将String转换为原始数据类型类型为“ char”的数组,但这无助于将String转换为Character类型的对象数组。 我将如何去做? 问题答案: 用这个:

  • 我快速浏览了C 03标准,但仍然无法判断这种行为是否有保证: 结果是: VC在32位窗口中给出<code>0xffffffff。但我的假设是,转换可以通过两种方式进行: 1) 8位有符号字符-1首先直接转换为8位无符号值,该值为二进制11111111或十进制255,然后扩展为32位无符号整数,给出255(0xff)。 2)8位有符号字符-1被有符号扩展到32位有符号int,给出0xffffffff

  • 我在写JNI。在这种情况下,我的Java程序使用ByteOutputStream()获取一个图像字节数组,然后用这个数组调用C中的一个函数,将字节数组转换为无符号char*。代码如下: 在这一点上,当我编译时,我不断收到警告: 警告:使用“jbyte *”类型的表达式(也称为“signed char *”)初始化“unsigned char *”会在指向具有不同符号[-Wpointer-sign]

  • 我有这样一个字符串: 和一个数组: 我想制作这个: 我试着用sscanf(),但我做不到。