请问如何把一个二进制数组转化成十进制
有一个类似这样的二进制数组
1100010010100
1000011010101
0010101011101
要求8位一读 转化成十进制如何转化
问题点数:40、回复次数:26Top
1 楼chen2831278(云)回复于 2005-09-22 16:06:18 得分 0
dingTop
2 楼viena(维也纳N02)回复于 2005-09-22 16:10:05 得分 0
查表,一一对应
Top
3 楼viena(维也纳N02)回复于 2005-09-22 16:12:06 得分 5
00000000 0
00000001 1
00000010 2
……
11111111 255
不过256个而已,呵呵,不算多Top
4 楼chen2831278(云)回复于 2005-09-22 16:19:50 得分 0
不明白啊Top
5 楼colon78()回复于 2005-09-22 16:22:14 得分 0
fgfTop
6 楼chen2831278(云)回复于 2005-09-22 16:27:10 得分 0
俺是超级菜鸟 楼上说的俺都不知道啊Top
7 楼chen2831278(云)回复于 2005-09-22 16:54:00 得分 0
顶Top
8 楼viena(维也纳N02)回复于 2005-09-22 16:56:12 得分 0
你的数组是什么数据类型呢?Top
9 楼viena(维也纳N02)回复于 2005-09-22 17:00:54 得分 0
你不说清楚,别人也没法帮你
是二进制数据(VB中一般用Byte数组来存储二进制数据)
还是保存"0"或"1"的字符串数组,数组元素是字符串吗?
我看你写了三行,每行13位二进制,是什么意思?Top
10 楼viena(维也纳N02)回复于 2005-09-22 17:07:33 得分 0
二进制字符串先转为16进制字符串比较方便,每4位分组,按下表转换为16进制
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 FTop
11 楼chen2831278(云)回复于 2005-09-22 17:14:02 得分 0
哦 我那个是随手打的 是这个程序求得的
Public Sub CreateART()
Dim R As Long, G As Long, B As Long, x As Long, y As Long
Dim rR As Single, rG As Single, rB As Single
Dim L As Long, Max As Single, Min As Single, s As String
Dim N As Single, GD() As Integer
CancelDraw = False
ResetDraw = False
ImageFrm.Pic.ScaleMode = vbPixels
ReDim GD(0 To ImageFrm.Pic.ScaleWidth - 1, 0 To ImageFrm.Pic.ScaleHeight - 1)
For y = 0 To ImageFrm.Pic.ScaleHeight - 1
For x = 0 To ImageFrm.Pic.ScaleWidth - 1 '扫描所有像
L = ImageFrm.Pic.Point(x, y)
R = L And 256
G = L And 65280
B = L And 16711680
rR = R / 255: rG = G / 255: rB = B / 255
Max = Maximum(rR, rG, rB)
Min = Minimum(rR, rG, rB)
N = (Max + Min) / 2
If N <= 0.5 Then
GD(x, y) = 0
Else
GD(x, y) = 1
End If
Next x
Next y
Top
12 楼chen2831278(云)回复于 2005-09-22 17:15:01 得分 0
我知道则么算 可不知道用程序则么编 汗 学的很不好Top
13 楼benyfeifei(狒狒)回复于 2005-09-22 17:30:05 得分 0
呵呵,楼主的问题还没有搞定呢。下班了,晚上有空帮你看看吧。Top
14 楼viena(维也纳N02)回复于 2005-09-22 17:32:46 得分 0
不是“8位一读”吗?循环累加就可以了
定义一个整数N
判断第一位,如果是0,什么也不做,如果是1,N+128
第二位,N+64
三N+32
四N+16
五N+8
六N+4
七N+2
八N+1
最后得到的N就是这8位对应的数值(也不是10进制,计算机里的数都是二进制,但用CStr()函数转换为字符串就是十进制了)Top
15 楼chen2831278(云)回复于 2005-09-22 17:36:39 得分 0
回复人: benyfeifei(狒狒) ( ) 信誉:100
好 这是另一个问题了 呵呵 我太笨了 一点都不会Top
16 楼chen2831278(云)回复于 2005-09-22 17:39:50 得分 0
回复人: viena(维也纳nn-实心木头人) ( ) 信誉:100
恩我去试试看 8位一读 读取字符串是不是用MID()啊Top
17 楼viena(维也纳N02)回复于 2005-09-22 17:45:11 得分 0
咦,不是Integer数组吗?怎么又成字符串了?Top
18 楼chen2831278(云)回复于 2005-09-22 17:58:10 得分 0
啊 打错了 打错了Top
19 楼chen2831278(云)回复于 2005-09-22 17:58:32 得分 0
是数组Top
20 楼chen2831278(云)回复于 2005-09-23 08:10:28 得分 0
dingTop
21 楼domhuang(不名)回复于 2005-09-23 08:48:33 得分 0
从底位到高位 第一位是 2的0次方 第2位是2的一次方 第3位是2的2次方 如此推下去
该位为0不相加 1的时候相加 做到最高位就可以了
不管你多少位都可以
Top
22 楼chen2831278(云)回复于 2005-09-23 09:04:29 得分 0
晕了 跟前面大侠说的一样 我则么获取8位呢Top
23 楼benyfeifei(狒狒)回复于 2005-09-23 09:28:51 得分 30
'看看下面的算法吧,没测试过
Private Sub Command1_Click()
Dim GD(0 To 99, 0 To 99) As Integer
Dim result() As Byte
Dim bytResult As Byte
Dim lngRank As Long
'先求出原始矩阵的秩
lngRank = UBound(GD, 1) - LBound(GD, 1) + 1
lngRank = lngRank * (UBound(GD, 2) - LBound(GD, 2) + 1)
'判断秩是不是8的倍数
If (lngRank Mod 8) <> 0 Then
ReDim result(0 To CLng(lngRank \ 8))
Else
ReDim result(0 To CLng(lngRank \ 8) - 1)
End If
Dim i As Long, j As Long, k As Long
Dim m As Integer
j = 0: k = 0
For i = LBound(result) To UBound(result)
bytResult = 0
For m = 0 To 7
bytResult = bytResult + GD(j, k) * 2 ^ m
k = k + 1
If k > UBound(GD, 2) Then '如果超过了列数,则指向下一行
k = 0
j = j + 1: If j > UBound(GD, 1) Then Exit For
End If
Next
result(i) = bytResult
Next
End SubTop
24 楼chen2831278(云)回复于 2005-09-23 09:59:52 得分 0
顶一下Top
25 楼chen2831278(云)回复于 2005-09-23 15:17:48 得分 0
为什么Dim GD(0 To 99, 0 To 99) As Integer 是0到99Top
26 楼IvyAngta(我爱编程!谎话?)回复于 2005-09-23 15:52:18 得分 5
利用最原始的方法,从二进制和十进制之间的转换原则入手!每次读取8个二进制字符入一个只可以存8 个字符的数组中,再从右往左加数据,不管是不是0 ,都是用2的n次方和当前位置的0/1相乘(N当然是目前的从右往左数位置-1),这么做上来不就可以了!然后再重复重复再重复,就可以完成了!当然最后一段可能没有达到8个位置长度,所以在每次计算结束时都要清空这个数组或是赋一个不是0、1的字符,在每次计算之前都要判断,当前这个位置上的数字是不是0或是1,是则开始计算,否则就继续左移。Top




