【问题标题】:How do I convert binary/hex array to string array in C如何在 C 中将二进制/十六进制数组转换为字符串数组
【发布时间】:2014-03-15 16:51:48
【问题描述】:

在我的任务中(仍在开始:))为了更好地编程,我偶然发现了一些我无法回答的问题。

我的任务是将二进制/十六进制数据(在数组中)转换为字符串数组。到目前为止,我只设法转换和打印十六进制数据的“MSB”。

这是我当前的代码。建设性的批评受到高度赞赏:)

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i = 0;  

    unsigned long rawdata[] ={0x60,0x100,'\0'};

    char stringForRawdata[250];

    char finalString[250];

    while(i<2)
    {
        sprintf(stringForRawdata,"%lx",*(rawdata+i));

        //sprintf(finalString,"%s",stringForRawdata);

        finalString[i] = *(stringForRawdata);

        printf("\nfinalString[%d] = %s",i,finalString+i);

        printf("\nrawdata = %lx for i = %d\n",*(rawdata+i),i); 

        i = i+1;    

    }
    printf("\n stringForRawdata = %s\n",stringForRawdata);
    printf("\n\n finalString array is %s\n",finalString);
 }

输入是unsigned long rawdata[] ={0x60,0x100,'\0'};

预期输出是字符串数组{60,100,\0}{0x60,0x100,\0}

问题是我只能得到最左边的数字到我的字符串数组。

【问题讨论】:

  • 我不认为0x60 在字符串数组中是60。不应该是96吗?
  • 他用%lx打印它,而不是%l,它将是字符串数组中的60
  • 你想要{"0x60","0x100","\0"}还是"{0x60,0x100,\0}"

标签: c binary string hex


【解决方案1】:
#include <stdio.h>
#include <string.h>

int main()
{ 
    int i, j;`
    unsigned long rawdata[] ={0x60,0x100,'\0'};
    char stringForRawdata[250] = "{";

    int k = sizeof(rawdata)/ sizeof(rawdata[0]), c = 1;

    for(i, j=0; i< k; i++)

    {
        j+=c;        // think why
        c = sprintf(&stringForRawdata[j], "0x%x,", rawdata[i]);
    }
    sprintf(&stringForRawdata[j], "\\0}");
    printf("\nstringForRawdata = %s\n",stringForRawdata);

    return 0;
 }

【讨论】:

  • 建议更改:1) for(i=0, j=0; vs. for(i, j=0; 2) "0x%lx," vs. "0x%x," 3) int i, j 删除尾随`。
【解决方案2】:

在每次迭代中,打印到finalString + strlen(finalString)

这里是一个例子(假设输入数组总是以'\0'结尾):

int i = 0;
char finalString[250]   = "{";
unsigned long rawdata[] = {0x60,0x100,'\0'};

for (i=0; i<sizeof(rawdata)/sizeof(*rawdata)-1; i++)
    sprintf(finalString+strlen(finalString),"%lx,",rawdata[i]);
sprintf(finalString+strlen(finalString),"\\0}");

请注意sprintf 通常是不安全的(考虑改用snprintfsprintf_s)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-08
    • 2017-06-17
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    相关资源
    最近更新 更多