ASCII字符串到十六进制整数的转换

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

我想把一个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;

}

如果要以十六进制形式打印整数,这可能会有所帮助:

#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
-终止符时,故意不计算。