3

文字列 char の ascii (int および hex 形式) 表現を char ごとに取得する必要があります。たとえば、「hello」という文字列がある場合、forint ascii 104 101 108 108 111 と forを取得します。hex 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 では、文字列は隣接するメモリ位置にある文字の数です。やるべきことは 2 つあります: (1)文字列を 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
/* 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 に答える