C#怎么把一个int数转化为一个二进制数组?

gezhu1212 2021-04-13 09:47:48
比如int=3,怎么把它转成16位的数组{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}
有没有直接封装好的函数?
...全文
905 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣殿骑士18 2021-04-13
  • 打赏
  • 举报
回复
对了,就是用BitConverter
wanghui0380 2021-04-13
  • 打赏
  • 举报
回复
还能改成更晕的
 public static IEnumerable<int> GetBit16Low1(int value)
        {
            for (int i = 15,t=1<<i,r= (value | t) == value ? 1 : 0; i >=0; i--,t=t>>1, r = (value | t) == value ? 1 : 0)
                yield return r;
            
        }
当然一般情况下,你要写成这样,估计是要挨骂的,反正我要看见这个codereview我是不给过,我得把人喊进小黑屋让他自己解释到底想干嘛,解释不了。扣绩效是跑不了的
gezhu1212 2021-04-13
  • 打赏
  • 举报
回复
引用 4 楼 wanghui0380 的回复:
下面在贴点眼晕的玩意,当然下面两个你就纯粹看看,别当真。只是纯粹技巧,而不是技术了 1.直接linq var b= Enumerable.Range(0, 16).Select(p => ((1 << (15 - p) | value) == value) ? 1 : 0); 2.把3楼的改成,普通人一眼看不懂的 public static IEnumerable<int> GetBit16Low1(int value) { for (int i = 15,t=1<<i; i >=0; i--,t=t>>1) { int r = (value | t) == value ? 1 : 0; yield return r; } }
这个看着懵逼……
wanghui0380 2021-04-13
  • 打赏
  • 举报
回复
下面在贴点眼晕的玩意,当然下面两个你就纯粹看看,别当真。只是纯粹技巧,而不是技术了 1.直接linq var b= Enumerable.Range(0, 16).Select(p => ((1 << (15 - p) | value) == value) ? 1 : 0); 2.把3楼的改成,普通人一眼看不懂的 public static IEnumerable<int> GetBit16Low1(int value) { for (int i = 15,t=1<<i; i >=0; i--,t=t>>1) { int r = (value | t) == value ? 1 : 0; yield return r; } }
wanghui0380 2021-04-13
  • 打赏
  • 举报
回复
上面那个是利用微软现有的功能 你要想炫一把手动轮子也行,右移 加位判定
public static IEnumerable<int> GetBit16Low1(int value)
        {
            int t = 1;
            for (int i = 15; i >=0; i--)
            {
                var t1 = 1 << i;
                if ((value | t1) == value)
                    yield return 1;
                else
                {
                    yield return 0;
                }
            }
        }
wanghui0380 2021-04-13
  • 打赏
  • 举报
回复
static async Task Main(string[] args)
        {


            int i=3;
            var res = GetBit16Low(i).ToList();

        }


        public static IEnumerable<int> GetBit16Low(int value)
        {
            short i = (short) value;
               BitArray bitArray=new BitArray(BitConverter.GetBytes(i));
               for (int j = bitArray.Length-1; j >= 0; j--)
               {
                   yield return Convert.ToInt32(bitArray[j]);
               }
        }
蜗牛慢慢趴 2021-04-13
  • 打赏
  • 举报
回复
public static byte[] IntArrToByteArr(int[] intArr) { int intSize = sizeof(int) * intArr.Length; byte[] bytArr = new byte[intSize]; //申请一块非托管内存 IntPtr ptr = Marshal.AllocHGlobal(intSize); //复制int数组到该内存块 Marshal.Copy(intArr, 0, ptr, intArr.Length); //复制回byte数组 Marshal.Copy(ptr, bytArr, 0, bytArr.Length); //释放申请的非托管内存 Marshal.FreeHGlobal(ptr); return bytArr; }
Bridge_go 2021-04-13
  • 打赏
  • 举报
回复
int[] arr = Convert.ToString(3, 2)
    .PadLeft(Marshal.SizeOf(a) * 4, '0')
    .ToCharArray()
    .Select(ss => int.Parse(ss.ToString()))
    .ToArray();

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧