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

如何在C中将字符ASCII转换为十六进制等效?,c,char,hex,ascii,lcd,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

所以基本上,我正在编写代码,通过微控制器控制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]);
    }
}
//将每个字符转换为十六进制并发送到LCD
void sendString(无符号字符*字符串){
sendCommand(0x01);//清除屏幕0x01=0000000 1
_延迟时间(2);
sendCommand(0x38);//置于8位模式
_延期付款(50);
sendCommand(0b0001110);//打开LCD并关闭光标
_延期付款(50);
//对于字符串中的每个字符,写入LCD
for(int i=0;i
然后sendString方法需要转换每个字符。以下是我到目前为止的情况:

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;
 }
unsigned int convertasciothex(unsigned char*ch)
{
int-hexeequivalent[sizeof(ch)]={0};
对于(int i=0;i

那么我该如何进行转换呢?我是C语言的新手,学习速度很慢。当我在某个地方读到一个字符实际上被存储为8位int时,我有一种感觉,我完全错了。如何让我的方法返回每个输入字符的十六进制值

在C语言中,字符是一个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]);
    }
}

在C语言中,字符是一个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]);
    }
}

在C语言中,字符是一个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]);
    }
}

在C语言中,字符是一个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]);
    }
}

ASCII字符在内部以数字表示,因此您不必转换它们,除非您想输出它们的十六进制值而不是它们本身。(有时我发现很难向一开始不理解它的人解释这个简单的想法。)“十六进制值”是什么?好的,所以基本上我的sendChar函数是这样工作的:sendChar(0x54);LCD屏幕上显示ascii十六进制0x54的相关字符。因此,如果我理解您Eugene,我应该简单地执行以下操作:在for循环中的sendChar(ch[I])将我“字符串”中的每个字符发送到LCD?不需要转换,因为字符实际上是用8位数字表示的?@John August确切地说..酷,很抱歉误解了,我花了一点时间才理解,但我想我现在明白了。我要试一试!ASCII字符在内部以数字表示,因此您不必转换它们,除非您想输出它们的十六进制值而不是它们本身。(有时我发现很难向一开始不理解它的人解释这个简单的想法。)“十六进制值”是什么?好的,所以基本上我的sendChar函数是这样工作的:sendChar(0x54);LCD屏幕上显示ascii十六进制0x54的相关字符。因此,如果我理解您Eugene,我应该简单地执行以下操作:在for循环中的sendChar(ch[I])将我“字符串”中的每个字符发送到LCD?不需要转换,因为字符实际上是用8位数字表示的?@John August确切地说..酷,很抱歉误解了,我花了一点时间才理解,但我想我现在明白了。我要试一试!ASCII字符在内部以数字表示,因此您不必转换它们,除非您想输出它们的十六进制值而不是它们本身。(有时我发现很难向一开始不理解它的人解释这个简单的想法。)“十六进制值”是什么?好的,所以基本上我的sendChar函数是这样工作的:sendChar(0x54);LCD屏幕上显示ascii十六进制0x54的相关字符。因此,如果我理解您Eugene,我应该简单地执行以下操作:在for循环中的sendChar(ch[I])将我“字符串”中的每个字符发送到LCD?不需要转换,因为字符实际上是用8位数字表示的?@John August确切地说..酷,很抱歉误解了,我花了一点时间才理解,但我想我现在明白了。我要试一试!ASCII字符在内部以数字表示,因此您不必转换它们,除非您想输出它们的十六进制值而不是它们本身。(有时我发现很难向一开始不理解它的人解释这个简单的想法。)“十六进制值”是什么?好的,所以基本上我的sendChar函数是这样工作的:sendChar(0x54);并显示ascii十六进制0x54的相关字符