我想将一个16字节的ascii
字符串转换为16字节的十六进制整数。请帮助。这是我的代码:
uint stringToByteArray(char *str,uint **array)
{
uint i, len=strlen(str) >> 1;
*array=(uint *)malloc(len*sizeof(uint));
//Conversion of str (string) into *array (hexadecimal)
return len;
}
答案 0 :(得分:1)
如果您正在寻找以十六进制形式打印整数,这可能会有所帮助:
#include <stdio.h>
int main() {
/* define ASCII string */
/* note that char is an integer number type */
char s[] = "Hello World";
/* iterate buffer */
char *p;
for (p = s; p != s+sizeof(s); p++) {
/* print each integer in its hex representation */
printf("%02X", (unsigned char)(*p));
}
printf("\n");
return 0;
}
如果您只想将char
数组转换为1字节整数数组,那么您已经完成了。 char
已经是整数类型。您可以使用已有的缓冲区,或使用malloc
/ memcpy
将数据复制到新的缓冲区。
您可能希望查看stdint.h
中定义的显式宽度整数类型,例如,uint8_t
表示一个字节的无符号整数。
答案 1 :(得分:0)
16个字符长度的C-“字符串” 16字节!
要将它转换为“byte” - 数组(16个条目),您可能希望执行以下操作:
#include <unistd.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
/* Copies all characters of str into a freshly allocated array pointed to by *parray. */
/* Returns the number of characters bytes copied and -1 on error. Sets errno accordingly. */
size_t stringToByteArray(const char * str, uint8_t **parray)
{
if (NULL == str)
{
errno = EINVAL;
return -1;
}
{
size_t size = strlen(str);
*parray = malloc(size * sizeof(**parray));
if (NULL == *parray)
{
errno = ENOMEM;
return -size;
}
for (size_t s = 0; s < size; ++s)
{
(*parray)[s] = str[s];
}
return size;
}
}
int main()
{
char str[] = "this is 16 bytes";
uint8_t * array = NULL;
ssize_t size = stringToByteArray(str, &array);
if (-1 == size)
{
perror("stringToByteArray() failed");
return EXIT_FAILURE;
}
/* Do what you like with array. */
free(array);
return EXIT_SUCCESS;
}