使用转义序列将字符串转换为一个

问题描述 投票:0回答:6

我有一个包含十六进制字符(没有0x或\ x)的char字符串:

> char *A = "0a0b0c";

我想从中获得

> const char *B = "\x0a\x0b\x0c";

是否有一种有效的方法?谢谢!

编辑:为清楚起见,我希望结果字符串包含3个字符\ x0a,\ x0b,\ x0c,而不是12个字符串,表示“ \ x0a \ x0b \ x0c”,其中“ \”和x”被读取为单个字符。

这是我尝试过的:

const char *B[12];

for(j=0; j<4; ++j)
    {
        B[4*j+0] = '\\';
        B[4*j+1] = 'x';
        B[4*j+2] = A[2*j];
        B[4*j+3] = A[2*j+1];
    };
B[12]='\0';

这给了我12个字符串“ \ x0a \ x0b \ x0c”,但我希望B像这样被分配:

const char *B = "\x0a\x0b\x0c";

我有一个包含十六进制字符(没有0x或\ x)的char字符串:> char * A =“ 0a0b0c”;我想从中获得> const char * B =“ \ x0a \ x0b \ x0c”;有没有一种有效的方法...

c arrays hex
6个回答
0
投票

您可以编写一个将所需的sprintf转换为字符串,然后将其与目标字符串合并的函数。


0
投票

如果您只是想在[[string-literal]中的每个"\x"之前添加'0',并在新字符串A中添加结果,那么就需要一个简单直接的循环,和B中的存储足以处理B中每个"\x"'0'加法。


0
投票
$ ./bin/straddescx \x0a\x0b\x0c

0
投票
假设没有错误的输入,假设'a'至'f'是顺序排列的,假设没有大写:

0
投票
虽然按照kiran的建议使用char // remember to #include <ctype.h> char *input = "0a0b0c"; char *p = input; while (*p) { v = (isdigit((unsigned char)*p) ? *p-'0' : *p-'a'+10) * 16; p++; v += isdigit((unsigned char)*p) ? *p-'0' : *p-'a'+10; p++; printf("0x%d", v); // use v } ,但可以更改字符串,但不允许插入字符。因为那样会使字符串更长,因此不适合可用内存。如果您无法立即使用所需的大小创建目标字符串,那么这将是一个问题。

0
投票
假设存在VLA,您可以这样做:
© www.soinside.com 2019 - 2024. All rights reserved.