如何在C中将char ASCII转换为十六进制等效?

时间:2015-01-26 18:16:51

标签: c char hex ascii lcd

基本上,我正在编写代码来通过微控制器控制LCD。 (atmega 32)我的主要方法中有以下内容:

unsigned char str1[9] = "It Works!";
sendString(str1);

这是我的sendString方法:

// Converts each char to hex and sends to LCD
void sendString(unsigned char *string){ 


    sendCommand(0x01); // Clear screen 0x01 = 00000001
    _delay_ms(2);
    sendCommand(0x38); // Put in 8-bit mode
    _delay_us(50);
    sendCommand(0b0001110); // LCD on and set cursor off
    _delay_us(50);

    //For each char in string, write to the LCD
    for(int i = 0; i < sizeof(string); i++){
        convertASCIIToHex(string[i]);
    }
}

然后sendString方法需要转换每个char。以下是我到目前为止的情况:

unsigned int convertASCIIToHex(unsigned char *ch)
{
    int hexEquivilent[sizeof(ch)] = {0};

    for(int i = 0; i < sizeof(ch); i++){
        // TODO - HOW DO I CONVERT FROM CHAR TO HEX????
    }

    return hexEquivilent;
 }

那我该如何进行转换呢?我是C的全新人,我正在慢慢学习。我有一种感觉,我正在解决这个问题,因为我在某处读到了一个char实际上存储为8位int。如何让我的方法返回每个输入char的HEX值?

1 个答案:

答案 0 :(得分:3)

在C中,char是一个8位有符号整数,您可以使用十六进制来表示它。在以下行中,a,b和c具有相同的值,即8位整数。

char a = 0x30;  //Hexadecimal representation
char b = 48;    //Decimal representation
char c = '0';   //ASCII representation

我认为你需要它只是发送字符串的字符,而不是任何转换为​​十六进制。一个问题是你不能使用sizeof()来获取字符串的长度。在C中,字符串以NULL结尾,因此您可以迭代它直到找到它。试试这个:

// Converts each char to hex and sends to LCD
void sendString(unsigned char *string){ 


    sendCommand(0x01); // Clear screen 0x01 = 00000001
    _delay_ms(2);
    sendCommand(0x38); // Put in 8-bit mode
    _delay_us(50);
    sendCommand(0b0001110); // LCD on and set cursor off
    _delay_us(50);

    //For each char in string, write to the LCD
    for(int i = 0; string[i]; i++){
        sendCommand(string[i]);
    }
}