【问题标题】:How to change a char to ASCII form?如何将字符更改为 ASCII 形式?
【发布时间】:2015-11-24 02:29:02
【问题描述】:

我需要更改我的程序,如何使用某些函数将 char 更改为 ASCII? 我的手机从 8051 接收数据,总是显示“0”,这是不正确的。

字符转ASCII码。

void Data_TX(unsigned char Y)
{
    unsigned char Buff_Y[3];

    Buff_Y[2] = (Y / 100) + 0x30;
    Buff_Y[1] = (Y / 10) % 10+0x30;
    Buff_Y[0] = (Y % 10) + 0x30;

    SBUF = *Buff_Y;
    while (TI == 0);
    TI = 0;
} 

这是我的电路原始代码,LCD 与 8051 接口。

bit Sensor_read(unsigned char read[5]);

使用我的功能。

Data_TX(read[2]); //read data.
Data_TX((int)read[2]); //read data, this program can't to run. 

【问题讨论】:

  • 很不清楚,char 对 ascii 是什么意思?这没有意义。
  • char 是一种用于存储数字的变量类型(在 C、C++ 和其他一些语言中)。 ASCII 是一种将符号分配给数字的方法。你想要什么?
  • @deviantfan c++ 数据类型? OP:您还应该决定它是什么语言,因为解决方案将取决于它。
  • @iharob “变量”类型更好吗?
  • @TheBook 你在说什么?整数除法会截断余数,因此 299 / 100 将始终为 2。这是您尝试并查看应该安全的少数几次之一。

标签: c byte 8051


【解决方案1】:
Buff_Y[2] = (Y / 100) + 0x30;
Buff_Y[1] = (Y / 10) % 10+0x30;
Buff_Y[0] = (Y % 10) + 0x30;

这一切都很好。如果您打印这三个字节,您将看到它们包含正确的值。


SBUF = *Buff_Y;

然而,这表明混乱。 *Buff_Y 等价于 Buff_Y[0]。那是单个char 值...如果您只能将单个char 值存储到SBUF 中,那么您将无法存储要存储到其中的三个char 值。

如果我们使用逻辑,我们可以做出这样的推论:如果您提供的输入可以被 10 整除(也就是说,当 Y % 100 时),char 的值将是 '0'...

当您考虑如何更改这行代码(以及我们看不到的代码部分)时,您可能还需要仔细考虑while (TI == 0);。无论试图解决什么问题,都应该有更好的解决方案。

【讨论】:

    【解决方案2】:

    我正在更改此代码,可以运行,但只收到一个数字。

    void Data_TX(unsigned char Y)
    

    { 无符号字符 Buff_Y[3];

    Buff_Y[3] = (Y / 100) + 0x30;
    Buff_Y[2] = (Y%100)/10+0x30;
    Buff_Y[1] = (Y / 10) % 10+0x30;
    Buff_Y[0] = (Y % 10) + 0x30;
    
    SBUF = *Buff_Y;
    while (TI == 0);
    TI = 0;
    

    }

    Data_TX((int)read[2]);
    

    【讨论】:

    • unsigned char Buff_Y[3]; 表示三个(不是四个)unsigned chars 的数组。它们是Buff_Y[0]Buff_Y[1]Buff_Y[2](Y%100)/10+0x30 在功能上与(Y / 10) % 10+0x30 相同,所以中间的字符总是会重复。别猜了……
    • 谢谢大家,我正在尝试运行它。这个程序可以运行。我正在添加一个循环,问题正在解决。
    • 不要将答案作为问题的更新发布。 SO 不使用论坛风格的线程,而是使用问答风格。如果您想添加到原始问题,请使用问题下方的编辑链接并添加到之前的内容。 (人们通常喜欢在问题中用“更新:”标记这些额外的部分)
    猜你喜欢
    • 1970-01-01
    • 2012-01-15
    • 2013-01-07
    • 2021-07-18
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 2017-06-29
    • 2014-07-11
    相关资源
    最近更新 更多