ASCII字符串到十六进制整数的转换
我想把一个16字节的ASCII字符串到十六进制整数的转换,c,C,我想把一个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) retu
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;
}
如果要以十六进制形式打印整数,这可能会有所帮助:
#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;
}
#包括
int main(){
/*定义ASCII字符串*/
/*请注意,char是一种整数类型*/
char s[]=“你好,世界”;
/*迭代缓冲区*/
char*p;
对于(p=s;p!=s+sizeof(s);p++){
/*以十六进制表示形式打印每个整数*/
printf(“%02X”,(无符号字符)(*p));
}
printf(“\n”);
返回0;
}
如果您只想将char
数组转换为1字节整数数组,那么您已经完成了char
已经是整数类型。您可以使用已有的缓冲区,或使用malloc
/memcpy
将数据复制到新的缓冲区
您可能希望查看在stdint.h
中定义的显式宽度整数类型,例如,对于单字节无符号整数,uint8\u t
长度为16个字符的C-“字符串”是16字节
要将其转换为“字节”数组(长度为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;
}
#包括
#包括
#包括
#包括
#包括
#包括
/*将str的所有字符复制到新分配的数组中,该数组由*parray指向*/
/*返回复制的字符数和字节数,出错时返回-1。相应地设置错误号。*/
大小\u t stringToByteArray(常量字符*str,uint8\u t**parray)
{
if(NULL==str)
{
errno=EINVAL;
返回-1;
}
{
尺寸=strlen(str);
*帕雷=马洛克(尺寸*尺寸(**帕雷));
如果(NULL==*parray)
{
errno=ENOMEM;
返回-大小;
}
对于(大小s=0;s
您的输入格式如何?你试过什么?一个int
是一个int
是一个int
…-没有十进制、十六进制或八进制或任何int
s,只有int
s。这个问题与CUDA有什么关系?16字节十六进制整数是什么意思。。。整数很可能不会那么大,因为你要把长度减半,看起来你可能希望从16个字符的字符串转换成8个字节的十六进制,或者8个字节或者64位的值…我想把字符转换成十六进制格式。简单地用十六进制打印是行不通的。在此之后的所有计算都使用16字节的十六进制值。@user2503061十六进制或ascii只是数字的打印表示形式。对于计算而言,字符数组实际上是一个字节宽度整数数组——或者您需要一个128位宽度的整数吗?char str[]=“这是16字节”/*@moooeeep:仅当计算0
-终止符时,故意不计算。