我正在尝试将一些文本从文本字段转换为 a(n) u32 值。例如,我以字符串格式输入(表示 32 位整数)“0x30323436”,字符串格式的输出为“0246”。我正在尝试在 C# 中执行此操作,但我也可以使用 C。谢谢你。
			
			1092 次
		
3 回答
            1        
        
		
这应该做你想要的:
string ParseWeirdFormat(string input)
{
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < input.Length; i += 2)
    {
        string hex = input.Substring(i, 2);
        int value = Convert.ToInt32(hex, 16);
        char c = (char)value;
        sb.Append(c);
    }
    return sb.ToString();
}
    于 2012-08-12T22:12:46.357   回答
    
    
            1        
        
		
这就是 C 比 C# 更酷的原因:
char in[] = "0x30323436";
char out[5] = {0};
sscanf( in, "0x%02x%02x%02x%02x", &out[0], &out[1], &out[2], &out[3] );
    于 2012-08-13T03:48:18.370   回答
    
    
            0        
        
		
C语言(C99或以上):
#include <ctype.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static bool cvt(const char* in, char* out)
{
    if (strlen(in) != 8)
        return false;
    char* end;
    long n = strtol(in, &end, 16);
    if (end == in || *end)
        return false;
    for(int i = 0; i < 4; i++)
    {
        unsigned char c = n >> ((3-i)*8);
        if(!isdigit(c))
            return false;
        out[i] = c;
    }
    return true;
}
int main(int argc, char** argv)
{
    char out[4];
    if ( argc <= 1 || !cvt(argv[1], out) )
    {
        fprintf(stderr, "usage: %s hex-ASCII-encoding-of-four-digit-string\n", argv[0]);
        return 1;
    }
    printf("%.4s\n", out);
    return 0;
}
    于 2012-08-12T23:17:07.747   回答