首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将int转换为二进制,然后拆分它,然后将其转换为int?

如何将int转换为二进制,然后拆分它,然后将其转换为int?
EN

Stack Overflow用户
提问于 2014-04-16 13:23:36
回答 2查看 1.1K关注 0票数 0

为了这样做,我必须用美国广播电台( USART )的频率与ATmega88 et通信,我发送了4位字节。2字节和3字节表示频率,其工作方式如下:

117和48 => 30000 Hz

看上去像:

01110101和00110000 => 0b0111010100110000

我可以手动发送117和48,它可以工作。

但是现在我想在我的WPF应用程序中使用一个滑块,并使用他的值。

我尝试了很多事情,我能做的更多的是:

代码语言:javascript
运行
复制
    private void Freq_Click(object sender, RoutedEventArgs e)
    {

        Int64 value_freq = (Int64)frequence_slider.Value;

        string freq1 = Convert.ToString(value_freq, 2); //Convert to binary in a string
        Int64 result = Convert.ToInt64(freq1); //Convert string in a Int64
        Int64 result2 = result << 8; // does not work like I expect .. it return a base10 number instead of a binary ..
        Int32 result3 = Convert.ToInt32(result, 10);

        System.Windows.MessageBox.Show("Partie 1 : " + freq1.ToString() + "\n \n" + "Partie 2 : " + result.ToString() + "\n \n" + "Partie 3 : " + result2.ToString() + "\n \n" + "Partie 4 : " + result3.ToString());
    }

希望有人能理解我在说什么。

有关本部分的ATmega代码,请从AtmelStudio获得更多解释:

代码语言:javascript
运行
复制
        freq=(uart_getc()<<8)+(uart_getc());
EN

Stack Overflow用户

回答已采纳

发布于 2014-04-16 13:54:22

我认为其中的数据类型和表示方式有些混乱。Int64.ToString()总是输出一个base10数字,因为整数不包含任何有关表示的信息。

密码

代码语言:javascript
运行
复制
string freq1 = Convert.ToString(value_freq, 2);
Int64 result = Convert.ToInt64(freq1);

将freq1转换为保存其二进制表示形式的字符串。但是,当您将其转换为Int64时,您将得到某种类似于base2数字的base10数字,因为该方法需要一个base10表示(我不确定最后一部分,但文档没有说明任何其他内容)。

为了澄清,让我举一个例子。假设我们有数字2(10),它是10(2) (在下面我将表示数字后面的大括号中的基)。现在,如果将"10“传递给ToInt64,它将不会看到10(2),而是看到10(10),即1010(2)。您预期结果<< 8会产生1000000000(2),但实际上是101000000000(2),因为您移动了1010(2)而不是10(2)。我希望这是明确的。

现在我们已经讨论了示例代码中的逻辑故障,让我们看看我们能做些什么。实际上,它比示例中的代码容易得多。实际上,您确实提供了两个字节,这些字节将被发送,一起表示一个短int,因此我将处理这个问题,希望您能够概括到适用于您的强盗的任何内容。

代码语言:javascript
运行
复制
short frequency = 30000;
byte high, low;
low = (byte)(frequency & 0x00FF); //cut the high byte of the short and write the remaining to low
high = (byte)(frequency >> 8);

现在,高含117,低含48。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23110810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档