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

时间:2013-06-23 17:30:55

标签: 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)

    return len;

}

2 个答案:

答案 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;
}