【问题标题】:How to convert char ASCII to hex equivilent in C?如何在 C 中将 char ASCII 转换为等效的十六进制?
【发布时间】:2015-03-25 05:22:47
【问题描述】:

所以基本上,我正在编写代码来通过微控制器控制 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 时,我有一种感觉,这一切都错了。如何让我的方法返回每个输入字符的 HEX 值?

【问题讨论】:

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

标签: c char hex ascii lcd


【解决方案1】:

在 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]);
    }
}

【讨论】:

  • 谢谢!对我来说,有很多关于 C 的知识要学。我习惯的 C# 和 Java 似乎更难一些。在添加了一个小延迟后,我让它工作了。 _delay_us(50);
猜你喜欢
  • 2013-05-07
  • 2016-06-27
  • 2012-04-09
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 2011-05-25
相关资源
最近更新 更多