2013-06-23 5 views
0

ascii 16 바이트 문자열을 16 진수 16 진수로 변환하고 싶습니다. 친절하게 도와주세요. 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; 

} 
+0

를 포맷 :

는 다음을 수행하는 것 같아서 (16 개 항목의 아이폰에의)는 "바이트"-array로 변환하게하려면? 너 뭐 해봤 니? –

+1

'int'는'int'입니다'int' ... - 소수점, 16 진수 또는 8 진수 또는'int's는 없지만'int' 만 있습니다. – alk

+0

이 질문은 CUDA와 어떤 관련이 있습니까? – sgarizvi

답변

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 배열을 설정하는 경우 여기에 내 코드입니다 - 바이트 정수를 입력하면 이미 완료된 것입니다. char은 이미 정수형입니다. 이미 가지고있는 버퍼를 사용하거나 malloc/memcpy을 사용하여 데이터를 새로운 것으로 복사 할 수 있습니다.

stdint.h에 정의 된 명시 적 너비 정수 유형을 살펴볼 수 있습니다 (예 : uint8_t, 1 바이트 부호없는 정수).

+0

문자를 16 진수 형식으로 변환하려고합니다. 헥스로 인쇄하는 것만으로도 효과가 있습니다. 이 이후의 모든 계산은 16 바이트 값을 사용합니다. – user2503061

+0

@ user2503061 _hex_ 또는 _ascii_는 숫자의 인쇄 된 표현입니다. 계산을 위해 문자 배열은 사실상 바이트 너비 정수의 배열입니다 --- 아니면 단일 128 비트 정수가 필요합니까? – moooeeeep

0

길이 16 문자의 C- "문자열" 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; 
} 
+0

'char str [] = "이것은 16 바이트입니다.";/* <- 실제로 이것은 17 바이트입니다.) * /' – moooeeeep

+0

@moooeeeep : 의도적으로하지 않은 '0'종료자를 계산하는 경우에만. – alk

관련 문제