如何将字符串转换为 12 位二进制而不改变它在 asp.net c# 中的值

Posted

技术标签:

【中文标题】如何将字符串转换为 12 位二进制而不改变它在 asp.net c# 中的值【英文标题】:how to convert string to 12 bit binary without change it's value in asp.net c# 【发布时间】:2021-06-15 18:59:51 【问题描述】:

我想将给定的字符串转换为 12 位二进制而不改变它的值 例如:如果我的字符串是 101010101010,那么我的二进制文件必须与字符串值(101010101010)相同。我将二进制文件(12)作为 sql server 中的数据类型

【问题讨论】:

据我所知,你问的是类型转换对吗? 这些标签是怎么回事?哪种语言? 到目前为止,您尝试了哪些方法来自己解决这个问题? 我已经选中了 12 个复选框,如果选中了复选框,那么它将被视为 1,否则为 0,我将该值存储在一个字符串中,然后将其与下一个复选框值结合起来。最后我转换成二进制 memberdetails = Convert.ToByte(a); 与编辑:你能澄清一下 - 你为什么使用binary(12)(这是一个 12 byte 值)来存储一个 12 bit价值?大了8倍!我的意思是,当然你可以存储 ASCII 字节值,所以 49, 48, 49,48, 49,48, 49,48, 49,48, 49,48 - 但这听起来不是一个好主意int 数据库日期类型可以正常工作 - 如果您想要使用该方法,char(12) 将是比 binary(12) 更明显的选择(尽管仍然是一个糟糕的选择)跨度> 【参考方案1】:

.NET 没有专门的 12 位二进制类型,但 int 工作得很好......

int i = Convert.ToInt32("101010101010", 2);

它给出相同的二进制值,0b101010101010 - 也就是十进制 2730。它看起来不同,但是...如果你想要一个 string你已经有了一个 .


如果您真的想要填充 binary(12) 数据库值,那么在 C# 术语中您需要一个 byte[12] 值。如果 this 的内容是 character 数据(因此十六进制值 31-30-31-30-31-30-31-30-31-30-31-30),那么可以很简单:

string s = "101010101010";
var bytes = Encoding.ASCII.GetBytes(s);

但是,如果您希望字节为值 0/1(即十六进制值 01-00-01-00-01-00-01-00-01-00-01-00),那么您需要更多类似的东西:

string s = "101010101010";
var bytes = new byte[s.Length];
for (int i = 0; i < bytes.Length; i++)

    bytes[i] = s[i] switch
    
        '0' => 0x00,
        '1' => 0x01,
        _ => throw new InvalidOperationException("Unexpected value: " + s[i]),
    ;

(在任何一种情况下,bytes 都是要发送到数据库的值)

【讨论】:

以上是关于如何将字符串转换为 12 位二进制而不改变它在 asp.net c# 中的值的主要内容,如果未能解决你的问题,请参考以下文章

将短转换为二进制...前 8 位和后 8 位由于某种原因被交换

2 的十进制数的补码,而不将其转换为二进制形式?

如何在不使用循环的情况下将二进制转换为十进制?

如何将 64 位二进制字符串转换为 ruby​​ 中的双浮点数?

lua语言 如何将字符串整体转换为一个十进制数据 而不按照每个字符转为若干个十进制数

C语言如何将64位整数转字符串