3

我需要通过 char 获取字符串 char 的 ascii(int 和 hex 格式)表示。例如,如果我有字符串“hello”,我会得到 forint ascii 104 101 108 108 111 和 forhex 68 65 6C 6C 6F

4

5 回答 5

8

怎么样:

char *str = "hello";

while (*str) {
    printf("%c %u %x\n", *str, *str, *str);
    str++;
}
于 2012-07-21T09:09:17.690 回答
3

在 C 中,字符串只是相邻内存位置中的一些字符。要做两件事:(1)逐个字符循环字符串。(2)输出每个字符。

(1) 的解决方案取决于字符串的表示形式(以 0 结尾还是具有显式长度?)。对于以 0 结尾的字符串,请使用

char *c = "a string";
for (char *i = c; *i; ++i) {
   // do something with *i
}

给定一个明确的长度,使用

for (int i = 0; i < length; ++i) {
   // do something with c[i]
}

(2) 的解决方案显然取决于您要实现的目标。要简单地输出值,请按照cnicutar 的回答并使用printf. 要获取包含表示的(0 终止)字符串,

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

/* convert a 0-terminated string to a 0-terminated string of its ascii values,
 * seperated by spaces. The user is responsible to free() the result.
 */
char *to_ascii(const char *inputstring) {

   // allocate the maximum needed to store the ascii represention:
   char *output = malloc(sizeof(char) * (strlen(inputstring) * 4 + 1));
   char *output_end = output;

   if (!output) // allocation failed! omg!
      exit(EXIT_FAILURE);

   *output_end = '\0';
   for (; *inputstring; ++inputstring) {
      output_end += sprintf(output_end, "%u ", *inputstring);
      //assert(output_end == '\0');
   }

  return output;
}

如果您需要输出显式长度的字符串,请使用strlen()或 差异 (size_t)(output_end-output)

于 2012-07-21T19:03:01.073 回答
0
int main()
{
enum type {decimal, hexa};
char *str = "hello";
char *temp_str = NULL;
temp_str = str;
static enum type index = decimal;
while (*str) {
    if(index == decimal)
     printf("%u\t", *str);
    else
     printf("%x\t",*str);
    str++;
}
printf("\n");
if(index != hexa)
{
   index = hexa;
   str = temp_str;
   main();
}

}

希望这能像你想要的那样正常工作,如果你想将它存储在一个 uint8_t 数组中,只需为它声明一个变量。

于 2012-07-21T09:56:12.877 回答
0

我知道这已经有 5 年历史了,但是我的第一个真正的程序将字符串转换为 ASCII,它是通过为 getchar() 分配一个变量然后在 printf() 中将其作为整数调用来以一种干净简单的方式完成的,一直在当然是一个循环,否则 getchar() 只接受单个字符。

#include <stdio.h>

int main() 
{
    int i = 0;

    while((i = getchar()) != EOF)
        printf("%d ", i);

    return 0;
}

这是使用 for() 循环的原始版本,因为我想看看我可以使程序变得多小。

#include <stdio.h>

int main() 
{
    for(int i = 0; (i = getchar()) != EOF; printf("%d ", i); 
}
于 2017-03-11T20:21:30.713 回答
0
/* Receives a string and returns an unsigned integer 
equivalent to its ASCII values summed up */
unsigned int str2int(unsigned char *str){
    int str_len = strlen(str);
    unsigned int str_int = 0;
    int counter = 0;

    while(counter <= str_len){
        str_int+= str[counter];
        printf("Acumulator:%d\n", str_int);
        counter++;
    }
    return str_int;
}
于 2019-07-01T05:21:17.667 回答