如何将字符串转换为 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 位由于某种原因被交换
如何将 64 位二进制字符串转换为 ruby 中的双浮点数?