Converting Type Int to Type Byte
我有一小部分代码试图将一个字节中的1位从0索引移动到7索引。每次移位后,我想取int值并将其转换为字节:
1 2 3 4 5 | for(int t=0; t<8; t++) { int ShiftBit = 0x80 >> t; byte ShiftBitByte = Convert.ToByte(ShiftBit.ToString(),8); } |
我希望产出是:
- 0x80
- 0x40
- 0x20
- 0x10
- 0x08
- 0x04
- 0x02
- 0x01
当我运行代码时,我遇到一个异常:"额外的不可分析字符在字符串的末尾。"是否有更好的方法来捕获这些字节?
谢谢你
你为什么不这么做?
1 2 3 4 5 | for ( int i = 0 ; i < 8 ; ++i ) { int s = 0x80 >> i ; byte b = (byte) s ; ) |
或(清洁工):
1 2 3 4 | for ( int i = 0x00000080 ; i != 0 ; i >>1 ) { byte b = (byte) i ; } |
把一个
1 2 | byte b = ... string s = string.Format("0x{0:X2}",b) ; |
你应该这么做。但是一个
你在找这个吗?
1 2 3 4 5 6 7 | for (int t = 0; t < 8; t++) { int ShiftBit = 0x80 >> t; byte ShiftBitByte = (byte) ShiftBit; Console.WriteLine("0x{0:X}",ShiftBitByte); } |
参见标准数字格式字符串
您得到错误是因为您错误地指定了字符串在基8中。数字"8"不是以8为基数的合法数字,它只使用0到7。
为什么不呢?
1 | for (byte b = 0x80; b != 0; b >>= 1) |
?
Thanks for catching that ... what I really meant to write was shift a bit in int 0x10000000 from index 0 to 7 and then convert it to a byte each time for an array [0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01]. Is that possible?
我不明白Int
1 2 3 4 5 6 7 | byte[] xs = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; byte[] ys = Enumerable.Range(0, 8).Select(i => (byte)(0x80 >> i)).ToArray(); byte[] zs = new byte[8]; for (int index = 0; index < zs.Length; index++) zs[index] = (byte)(0x80 >> index); |