|
|
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Есть массив Dim x(0 To 3) As Byte Есть переменная integer Dim xx As Integer при выполнении xx = CInt(x) - получаем ошибку Error 1 Value of type '1-dimensional array of Byte' cannot be converted to 'Integer'. Form1.vb ПОЧЕМУ????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 11:38 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
ты массив байт пытаешься преобразовать в одну переменную integer, поэтому и ошибка. нужно преобразовывать конкретный элемент массива. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 11:44 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
а как тогда получить из этих четырех элементов массива получить одно число типа integer желательно пример в одну строчку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 11:56 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Anton_85, а ты сам как представляешь правила перевода массива из четырёх байтовых элементов в двухбайтное целое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 12:03 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
> Автор: Anton_85 > а как тогда получить из этих четырех элементов массива получить одно > число типа integer > желательно пример в одну строчку разберёшся? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 12:07 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Можно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 12:29 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
А если на выходе надо иметь именно Integer (точнее их будет 2-а, ведь 4-ре байта), то: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 12:32 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
а как мне его загнать в этот код??? Public Class Form1 Dim x(0 To 3) As Byte Dim z As String Dim xx As Integer Dim myob As Object Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim b As FileStream = New FileStream("c:\1.bmp", FileMode.Open) b.Position = 2 b.Read(x, 0, 4) xx = CInt(x(0)) myob = x ' x(0) = 1 'x(1) = 1 'x(2) = 1 'x(3) = 2 z = CStr(x(0)) Dim q As Integer = CInt(x(0)) MsgBox(CStr(CInt(x(0)))) b.Close() End Sub End Class ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 15:24 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Anton_85, Если ваш код из .NET, то милости просим в .NET форум. Здесь VB6, VBA, VBS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2008, 16:16 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Выдераю из рабочего кода. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Число записано 4 байтами, а я его перевожу в длинное целое. Байты от меньшего к большему. Есть и обратная процедура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 15:10 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Извращенцы вы все... Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 15:50 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
AntonariyИзвращенцы вы все... Код: plaintext 1. 2. Ну а что делать, тем, кто не является, счастливым обладателем понятного справочника? Остаётся извращатся! Я так понял, что CopyMemory берёт x байт, в третьем аргументе, начиная с адреса второго, и всё это помещает в первый? CopyMemory [результат], [что], [сколько] А как проделать обратное преобразование? Т.е. из длинного целого записать эти 4 байта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 15:58 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Eric-SНу а что делать, тем, кто не является, счастливым обладателем понятного справочника?Не забывать, что они являются счастливыми обладателями интернета, посредством которого доступен понятный справочник msdn.microsoft.com ))) Eric-SА как проделать обратное преобразование?Мог бы уже догадаться)) Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 16:31 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
msdn там всё самое интересное на английском. В прочем у меня есть локальная версия, так же не русифицированная. А я вот тут, подумал, ведь long, ну и другие переменные немного не в той форме значение хранят. Т.е. значение-то будет сохранено и востановлено, только вот, формат его записи будет другой. А ещё целый бит тратится на знак "-" (минус)! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 16:45 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
А я вот тут, подумал, ведь long, ну и другие переменные немного не в той форме значение хранят. Т.е. значение-то будет сохранено и востановлено, только вот, формат его записи будет другой.В смысле старший-младший байты? Возможно. Зависит от смысла преобразования и использования массива. А ещё целый бит тратится на знак "-" (минус)!Нет, знак получается из формата записи. -1 = FF FF FF FF, -2 = FE FF FF FF, -3 = FD FF FF FF и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 16:59 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Eric-SВыдераю из рабочего кода.Это нерабочий код. Не учтён случай старшего байта, большего 127. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 18:38 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Eric-SА ещё целый бит тратится на знак "-" (минус)!Неправда. "Родным" для 80x86 архитектуры является представление 32-битных целых в дополнительном коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 18:41 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Бенедикт Eric-SА ещё целый бит тратится на знак "-" (минус)!Неправда. "Родным" для 80x86 архитектуры является представление 32-битных целых в дополнительном коде. Но мы то говорим о бэйсиковских integer и long! Про рабочий код... Там это в другом месте проверяется. Здесь вообще число не может быть очень большим. Обычно два старших байта вообще в ноль. Это не универсальная функция, а именно конкретный случай. Кому понадобится писать имя файла размером 4 gb? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 18:53 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Eric-SНо мы то говорим о бэйсиковских integer и long!Угу. Напрямую использующих соответствующие машинные типы. Что должен выдать код Код: plaintext 1. 2. Eric-SПро рабочий код... Там это в другом месте проверяется. Здесь вообще число не может быть очень большим. Обычно два старших байта вообще в ноль. Это не универсальная функция, а именно конкретный случай.Было бы это указано - ни слова бы не сказал. Eric-SКому понадобится писать имя файла размером 4 gb?Откуда взялось имя файла? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 20:03 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Ладно с типами данных и способами их хранения, могу и ошибатся. [quote] are stored as 16-bit (2-byte) numbers ranging in value from -32,768 to 32,767. The... [/quote] Здесь я вижу отрицательное число. Дальше, в 16 битах у нас 2^16 возможных значений. Т.е. 65536, отсюда пришел к выводу, что один байт означает отрицательное число. На сколько я помню, в машине об отрицательных числах реч вообще не идёт. Там отдельный флаг процессора. Код я выдрал и даже немного упростил, а то там непонятные, без контекста, имена переменных, смещение байта ну и разные другие не лишние для понимания. Собственно привёл его только для того, чтобы показать, как я вычесляю значение. На асме это бы выглядело бы ещё веселее, но мне и этот вариант подходит. Там же по сути просто dword грузится в 32 битный регистр, и это уже не 4 соседних байта, а длинное целое число. С 4 гиговым именем файла, немного преувеличил. На самом деле моя процедура работает с размерами текстовых документов. А многие редакторы хоть и хвалятся способностью прожевать 2 гиговый текстовик, но делают это очень долго и в принципе это никому не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 20:27 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Задаю вопрос, который так же подпадает под заголовок данный темы. Пожалуйста приведите пример преобразования битового массива в строку и обратно. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Пока извратился и написал свой перевод, но он естественно работает медленнее. И copyMem здесь не подайдёт, поскольку s, кажется, в уникоде. Кстати эта же функция в какой-то dll'ке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2008, 20:37 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
StrConv или опять же CopyMemory. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 10:37 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Или просто b = s =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 10:38 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Eric-SЛадно с типами данных и способами их хранения, могу и ошибатся. are stored as 16-bit (2-byte) numbers ranging in value from -32,768 to 32,767. The... Здесь я вижу отрицательное число. Дальше, в 16 битах у нас 2^16 возможных значений. Т.е. 65536, отсюда пришел к выводу, что один байт означает отрицательное число. На сколько я помню, в машине об отрицательных числах реч вообще не идёт. Там отдельный флаг процессора."В огороде бузина, в Киеве дядька." IA-32 Intel(R) Architecture Software Developer's Manual. Volume 1: Basic Architecture4 Data Types ... 4.2.1. Integers The IA-32 architecture defines two typed of integers: unsigned and signed. Unsigned integers are ordinary binary values ranging from 0 to the maximum positive number that can be encoded in the selected operand size. Signed integers are two’s complement binary values that can be used to represent both positive and negative integer values. Some integer instructions (such as the ADD, SUB, PADDB, and PSUBB instructions) operate on either unsigned or signed integer operands. Other integer instructions (such as IMUL, MUL, IDIV, DIV, FIADD, and FISUB) operate on only one integer type. The following sections describe the encodings and ranges of the two types of integers. 4.2.1.1. UNSIGNED INTEGERS ... 4.2.1.2. SIGNED INTEGERS ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 15:37 |
|
||
|
Преобразование типов
|
|||
|---|---|---|---|
|
#18+
Бенедикт "В огороде бузина, в Киеве дядька." Именно. Я цитировал msdn, про vb6, а вы архитектуру 32 разрядного проца. Как я уже писал типы разные, хоть названия и одинаковые. CopyMem будет копировать именно бэйсиковский формат никуда его не преобразуя. На то я и писал функцию, чтобы привести данные из одного формата в другой. Если кто работал с FreeBasic, поймёт всю нелепость сложившейся ситуации, поскольку в нём этих типов данных ещё больше. Например В нём есть integer и uinteger, первая стандартная бэйсиковская, а вторая именно стандартная машинная, т.е. положительное целое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2008, 16:59 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=35201261&tid=2162312]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
177ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 546ms |

| 0 / 0 |
