任務:
轉換包含十六進制的ASCII字符到其字節的字符串值 所以ASCII "FF"
變得0xFF
和ASCII "10" (x31x30x00)
0x10
變得
char asciiString[]="aaAA12fF";// input ascii hex string
char result[4]; // byte equivalent of the asciiString (the size should be at half of asciiString[])
//最後的結果應該是:
result[0] = 0xAA;
result[1] = 0xAA;
result[2] = 0x12;
result[3] = 0xFF;
// 1。Firt步:所以它僅包含上轉換的情況下asciiString:
// convert string to upper cases:
stringToUpperCases(asciiString);
使用:
void stringToUpperCases(char *p)
{
for(int i=0; *(p+i) !='\0'; i++)
{
*(p+i) = (unsigned char) toupper(*(p+i));
}
}
// 2。將包含十六進制ascii字符的字符串轉換爲其字節值:
// convert string to bytes:
int nrOfBytes = stringToBytes(asciiString,result);
//use:
unsigned char charToHexDigit(char c)
{
if (c >= 'A')
return (c - 'A' + 10);
else
return (c - '0');
}
unsigned char ascii2HexToByte(char *ptr)
{
return charToHexDigit(*ptr)*16 + charToHexDigit(*(ptr+1));
}
int stringToBytes(char *string, char *result)
{
int k=0;
int strLen = strlen(string);
for(int i = 0; i < strLen; i = i + 2)
{
result[k] = ascii2HexToByte(&string[i]);
k++;
}
return k; // number of bytes in the result array
}
// 3。打印結果:
printNrOfBytes(nrOfBytes, result);
//使用:
void printNrOfBytes(int nr, char *p)
{
for(int i= 0; i < nr; i++)
{
printf("0x%02X ", (unsigned char)*(p+i));
}
printf("\n");
}
// 4。結果應該是:
和0xAA和0xAA×12 0xFF的
// 5。這是測試程序:
char asciiString[]="aaAA12fF"; // input ascii hex string
char result[4]; // result
// convert string to upper cases:
stringToUpperCases(asciiString);
// convert string to bytes
int nrOfBytes = stringToBytes(asciiString,result);
// print result:
printNrOfBytes(nrOfBytes, result);
// result:
// 0xAA 0xAA 0x12 0xFF
來源
2013-01-02 18:48:48
sg7
有沒有這樣的事情,如ASCII字節或十六進制字節。 –
你(顯然!)想要做的是**將**一對字節轉換爲單個字節,**將兩個字節解釋爲ASCII碼元,後者又表示十六進制數字,併發出相應的十六進制值。解決這類問題需要精確理解你真正在做什麼;而精確的溝通也有很大的幫助:)你必須確定你從根本上理解了什麼是數據。就像大衛說的,字節只是字節;沒有ASCII字節或十六進制字節。 –
ASCII字節=表示ASCII字符的字節,十六進制字節=用十六進制表示的字節。我知道字節只是字節;我只是不知道該如何解釋。但其他人理解我的意思。不是最重要的嗎? –