I am attempting to convert some text from a text field to a(n) u32 value. An example would be that I enter in string format (to represent a 32-bit integer), "0x30323436", and the output in string format would be "0246". I am trying to do this in C#, but I can use C as well. Thank you.
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 に答える