尝试使用BlobEdit(Blob)使用PB12.5写入Hex文件(.bin)

时间:2016-11-10 16:56:21

标签: binary hex blob powerbuilder

我尝试使用PB12.5写入hex文件,我能够写入它而没有任何问题但是通过测试注意到我需要发送一个空值(00)到在特定点提交。

我知道如果我为字符串赋值null,它将使整个字符串为空,所以我尝试使用Blob,我可以在需要时插入一个空值(BlobEdit(blb_data,ll_pos,CharA(0)))

但是BlobEdit()会自动在每个位置之间插入一个空值,我不想这样,因为我试图更新hex文件会导致问题。我只需要将我的CharA(lb_byte)添加到Blob中的每个连续位置。

有没有办法解决这个问题,或者PB是否无法做到这一点?以下是代码:

    ll_test = 1
    ll_pos = 1
    ll_length = Len(ls_output)
    Do While ll_pos <= (ll_length)
        ls_data = Mid(ls_output, ll_pos, 2)
        lb_byte = Event ue_get_decimal_value_of_hex(ls_data)
        ll_test = BlobEdit(blb_data, ll_test, CharA(lb_byte), EncodingANSI!)
        ll_pos = ll_pos + 2
    Loop

Hex文件如下所示:

    16 35 2D D8 08 45 29 18 35 27 76 25 30 55 66 85 44 66 57 A4 67 99 

Blob更新后:

    16 00 48 00 5D 00 C3 92 00 08 00 48 00 51 00 E2

1 个答案:

答案 0 :(得分:1)

我希望能帮到你:

//////////////////////////////////////////////////////////////////////////
// Function: f_longtohex
// Description: LONG to HEXADECIMAL
//  Ambito: public
//  Argumentos:     as_number   //Variable long to convert to hexadecimal
//              as_digitos  //Number of digits to return
//  Return:         String      
//  Example: 
//              f_longtohex(198 , 2)    --> 'C6'
//              f_longtohex(198 , 4)    --> '00C6'
//////////////////////////////////////////////////////////////////////////
long ll_temp0, ll_temp1 
char lc_ret 
if isnull(as_digitos) then as_digitos = 2
IF as_digitos > 0 THEN 
    ll_temp0 = abs(as_number / (16 ^ (as_digitos - 1))) 
    ll_temp1 = ll_temp0 * (16 ^ (as_digitos - 1)) 
    IF ll_temp0 > 9 THEN 
        lc_ret = char(ll_temp0 + 55) 
    ELSE 
        lc_ret = char(ll_temp0 + 48) 
    END IF 
    RETURN lc_ret + f_longtohex(as_number - ll_temp1 , as_digitos - 1) 
END IF 
RETURN ''