| 381 | |
| 382 | |
| 383 | def variant_from_binary(data): |
| 384 | dimensions = None |
| 385 | array = False |
| 386 | encoding = ord(data.read(1)) |
| 387 | int_type = encoding & 0b00111111 |
| 388 | vtype = ua.datatype_to_varianttype(int_type) |
| 389 | if test_bit(encoding, 7): |
| 390 | value = unpack_uatype_array(vtype, data) |
| 391 | array = True |
| 392 | else: |
| 393 | value = unpack_uatype(vtype, data) |
| 394 | if test_bit(encoding, 6): |
| 395 | dimensions = unpack_uatype_array(ua.VariantType.Int32, data) |
| 396 | value = _reshape(value, dimensions) |
| 397 | return ua.Variant(value, vtype, dimensions, is_array=array) |
| 398 | |
| 399 | |
| 400 | def _reshape(flat, dims): |