2014-09-22 56 views
-5

給定一個指針和一個包含此指針大小的變量。指向帶空格字符串的指針

我需要做什麼來創建一個字符數組,其中包含每個字節的十六進制值後跟一個空格。

輸入:

char *pointer = "test"; 
int size = 5; 

輸出:

"74 65 73 74 00" 

指針不一定是字符串,可以是任何地址。

我可以打印它,但不知道如何保存在一個變量。

char *buffer = "test"; 
unsigned int size = 5; 
unsigned int i; 
for (i = 0; i < size; i++) 
{ 
    printf("%x ", buffer[i]); 
} 
+1

所以你嘗試過什麼至今? – taocp 2014-09-22 18:06:32

+0

您使用的輸出語句是什麼(非常重要)? – 2014-09-22 18:07:45

+0

我需要一個字符串/字符數組與輸出 – dromenox 2014-09-22 18:11:11

回答

1

提示:由於您使用的是C++,仰望hex I/O機械手:
http://en.cppreference.com/w/cpp/io/ios_base/fmtflags

如果你想使用C風格的I/O,仰望printf改性劑,%x ,如"0x%02X "

編輯1:
要保存在一個變量,採用C風格的函數:

char hex_buffer[256]; 
unsigned int i; 
for (i = 0; i < size; i++) 
{ 
    snprintf(hex_buffer, sizeof(hex_buffer), 
      "%x ", buffer[i]); 
} 

使用C++,查找了std::ostringstream

std::ostring stream; 
    for (unsigned int i = 0; i < size; ++i) 
    { 
    stream << hex << buffer[i] << " "; 
    } 
    std::string my_hex_text = stream.str(); 
+0

我知道如何打印,我需要保存在一個變量 – dromenox 2014-09-22 18:12:07

+0

在你的下一篇文章中,請澄清。 – 2014-09-22 18:15:58

+0

第二提示:查找ostringstream。 – 2014-09-22 18:16:06

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

char *f(const char *buff, unsigned size){ 
    char *result = malloc(2*size + size-1 +1);//element, space, NUL 
    char *p = result; 
    unsigned i; 

    for(i=0;i<size;++i){ 
     if(i) 
      *p++ = ' '; 
     sprintf(p, "%02x", (unsigned)buff[i]); 
     p+=2; 
    } 
    return result; 
} 
int main(void){ 
    char *buffer = "test"; 
    unsigned int size = 5; 
    char *v = f(buffer, size); 
    puts(v); 
    free(v); 
    return 0; 
}