如何将 char ASCII 转换为 C 中的十六进制等价物?
How to convert char ASCII to hex equivilent in C?
基本上,我正在编写代码通过微控制器控制 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方法需要转换每个字符。这是我目前所拥有的:
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 时,我有一种感觉我正在做这一切都是错误的。如何让我的方法 return 每个输入字符的 HEX 值?
在C语言中,一个char是一个8位有符号整数,可以直接用16进制来表示。在接下来的几行中,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]);
}
}
基本上,我正在编写代码通过微控制器控制 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方法需要转换每个字符。这是我目前所拥有的:
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 时,我有一种感觉我正在做这一切都是错误的。如何让我的方法 return 每个输入字符的 HEX 值?
在C语言中,一个char是一个8位有符号整数,可以直接用16进制来表示。在接下来的几行中,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]);
}
}