[英]Skip special characters while converting ASCII to HEX in C
我需要帮助以仅将字母数字字符(不包括特殊字符)的ascii转换为十六进制数据输出。
Input String is: 86741-30011
Expected result is: 38363734313330303131
Actual Result is: 3836373431
输出在非字母数字字符后中断。 它仅包含输出字符串,直到非字母数字字符为止。
码:
int main(void){
char word[12] = { '8', '6','7','4','1','-','3','0','0','1','1'};
char outword[20];
int i, len;
len = strlen(word);
printf("Input string: %s\n", word);
//printf("Total length: %d\n", len);
if(word[len-1]=='\n') word[--len] = '\0';
for(i = 0; i<len; i++) {
if (isalnum(word[i]) == 0) {
printf("%c is not an alphanumeric character.\n", word[i]);
} else {
sprintf(outword+i*2 , "%02X", word[i]);
}
}
printf("Hex output:%s\n", outword); return 0;
}
谁能帮助我获得预期的输出?
提前致谢。
使用不同的变量进行循环旋转并将数据添加到数组中。
#include <stdio.h>
int main(void){
char word[12] = { '8', '6','7','4','1','-','3','0','0','1','1'};
char outword[20];
int i, j, len;
len = strlen(word);
printf("Input string: %s\n", word);
//printf("Total length: %d\n", len);
if(word[len-1]=='\n') word[--len] = '\0';
for(i = 0,j=0; i<len; i++) {
if (isalnum(word[i]) == 0) {
printf("%c is not an alphanumeric character.\n", word[i]);
} else {
sprintf(outword+j*2 , "%02X", word[i]);
j=j+1;
}
}
printf("Hex output:%s\n", outword); return 0;
}
该代码将为您提供预期的结果38363734313330303131。
您需要分别计算输入和输出位置。
for(i = 0; i<len; i++)
{
if (isalnum(word[i]) == 0) {
printf("%c is not an alphanumeric character.\n", word[i]);
} else {
sprintf(outword+i*2 , "%02X", word[i]);
}
}
如果您的条件为真并且您打印文本,则计数器i
会递增。 这不仅用于到达下一个字符,而且还定义了输出数组中的位置。 这意味着在解析输入时不会触及数组外的2个字节。
如果偶然在此处有0个字节,则字符串在此处终止。
这将导致以下布局: "3836373431\\0\\03330303131"
打印为"3836373431"
。
您可以为输出添加另一个变量,并且仅在真正转换为十六进制时才递增。
int outpos;
for(i = 0, outpos = 0; i<len; i++)
{
if (isalnum(word[i]) == 0) {
printf("%c is not an alphanumeric character.\n", word[i]);
} else {
sprintf(outword+outpos*2 , "%02X", word[i]);
outpos++;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.