有一个类似这样的二进制数组
1100010010100
1000011010101
0010101011101
要求8位一读 转化成十进制如何转化

解决方案 »

  1.   

    你不说清楚,别人也没法帮你
    是二进制数据(VB中一般用Byte数组来存储二进制数据)
    还是保存"0"或"1"的字符串数组,数组元素是字符串吗?
    我看你写了三行,每行13位二进制,是什么意思?
      

  2.   

    二进制字符串先转为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 F
      

  3.   

    哦 我那个是随手打的 是这个程序求得的
    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
      

  4.   

    不是“8位一读”吗?循环累加就可以了
    定义一个整数N
    判断第一位,如果是0,什么也不做,如果是1,N+128
    第二位,N+64
    三N+32
    四N+16
    五N+8
    六N+4
    七N+2
    八N+1
    最后得到的N就是这8位对应的数值(也不是10进制,计算机里的数都是二进制,但用CStr()函数转换为字符串就是十进制了)
      

  5.   

    回复人: benyfeifei(狒狒) ( ) 信誉:100 
    好 这是另一个问题了 呵呵 我太笨了 一点都不会
      

  6.   

    回复人: viena(维也纳nn-实心木头人) ( ) 信誉:100 
    恩我去试试看 8位一读 读取字符串是不是用MID()啊
      

  7.   

    咦,不是Integer数组吗?怎么又成字符串了?
      

  8.   

    '看看下面的算法吧,没测试过
    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 IfDim i As Long, j As Long, k As LongDim m As Integerj = 0: k = 0For 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 Sub
      

  9.   

    为什么Dim GD(0 To 99, 0 To 99) As Integer 是0到99