我想优化我的代码,避免错误,我有这个功能,但我认为我可以改善和避免内存问题。
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
...
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 ;
有一些可能的优化。最大的优化来自避免做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(),但我做不到。