Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Q: как преобразовать String*4 в Long? И - обратно? (-) / 17 сообщений из 17, страница 1 из 1
23.08.2004, 18:00:22
    #32661866
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
...
Рейтинг: 0 / 0
23.08.2004, 18:36:46
    #32661914
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
1. Val
2. Format, Str, CStr
...
Рейтинг: 0 / 0
23.08.2004, 18:41:40
    #32661928
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
авторкак преобразовать String*4 в Long? И - обратно?
Вы бы уточнили, что именно надо....

Я почему-то понял, что требуется подобное:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)

Function MemCopyLong(ByRef rbBytes() As Byte, ByVal vlngOffset As Long) As Long
    CopyMemory MemCopyLong, rbBytes(vlngOffset),  4 &
End Function

Function Str2Long(ByVal str As String) As Long
    Dim bSource() As Byte
    Dim bDest( 3 ) As Byte
    Dim i As Long

    bSource() = str
    For i =  0  To UBound(bSource) Step  2 
        CopyMemory bDest(i /  2 ), bSource(i),  1 
    Next
    Str2Long = MemCopyLong(bDest,  0 )
End Function

?Str2Long("1111")
825307441
?hex(Str2Long("1111"))
31313131
...
Рейтинг: 0 / 0
23.08.2004, 19:22:05
    #32661974
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
Замечание: Достаточно стоки длиной 2 символа, а вовсе не 4
4 - это для даблов или карренсей.

без использования АПИ это можно сделать, например, так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Type sTr4
  s1 As String *  2 
End Type

Type LongType
  l1 As Long
End Type

Sub sub3()
  Dim s1 As sTr4
  Dim k As Long
  Dim d As LongType, d2 As LongType
  Dim sResult As String
 'исходное число 
  k =  35 

 'начинаем преобразование 
  d.l1 = k
  
   'в строку 
  LSet s1 = d
  Debug.Print s1.s1
  sResult = s1.s1
  
   'в число 
  LSet d2 = s1
  Debug.Print d2.l1
End Sub
...
Рейтинг: 0 / 0
23.08.2004, 19:33:45
    #32661990
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
авторЗамечание: Достаточно стоки длиной 2 символа, а вовсе не 4


Если считать, что что каждый символ 2 байта?
И получать знаки вопроса?
...
k = 825307441
...

sub3
??
825307441
...
Рейтинг: 0 / 0
23.08.2004, 19:44:16
    #32661997
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
Serge Gavrilov авторЗамечание: Достаточно стоки длиной 2 символа, а вовсе не 4


Если считать, что что каждый символ 2 байта?
И получать знаки вопроса?
...
k = 825307441
...

sub3
??
825307441

для тех, кто без нака вопроса - Hex существует:

Код: plaintext
1.
2.
3.
4.
5.
6.
Sub ttt()
Dim k As Long, s As String, g As Long
k = &H666
k =  999999 
s = Hex(k)
g = "&H" & s
End Sub

PS
вот появится вопрос - выяснится, что там совсем все другое имелось...
...
Рейтинг: 0 / 0
23.08.2004, 19:50:03
    #32662004
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
авторвот появится вопрос - выяснится, что там совсем все другое имелось...

Запросто ...
Почему мне более наглядно когда 4 символа - это как переключение в редакторе из обычного просмотра в Hex ...
...
Рейтинг: 0 / 0
24.08.2004, 09:49:11
    #32662321
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
Victoshaбез использования АПИ это можно сделать, например, так

Код: plaintext
1.
2.
3.
4.
Type sTr4
... 
  LSet s1 = d
...

- да, спасибо, именно об этом я и спрашивал ... И, что интересно, я ведь - опять же - когда-то это умел ... но - забыл! ;-)

VictoshaЗамечание: Достаточно стоки длиной 2 символа, а вовсе не 4
4 - это для даблов или карренсей.
- а вот тут, похоже, будет заковыка!
Если я работаю с текстами, которые ФАКТИЧЕСКИ без Юникода ... то есть кодовая таблица, интересующая меня, состоит из 256 символов ... То я хочу осуществлять преобразвание в Long сразу 4-х символов!

То есть мне важно не то, чтобы для хранения Long'а было "достаточно стоки длиной 2 символа", но - наоборот - чтобы для КОДИРОВАНИЯ стоки длиной 4 символа было достаточно Long'а ...

Правильно ли я понимаю, что предлагаем Вами метод ТАК не сработает???
...
Рейтинг: 0 / 0
24.08.2004, 10:17:59
    #32662400
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
вот яснее высказались - понятнее что Вам надо - ведь НИКТО не угадал


а Вам надо ПРИМЕРНО так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Sub sub2()
Dim lngResult As Long
Dim bt() As Byte

Dim str4T As String *  4 
 'Из строки в лонг 
str4T = "1234"

bt = StrConv(str4T, vbFromUnicode)
CopyMemory ByVal VarPtr(lngResult), bt( 0 ),  4 
Debug.Print lngResult


 'Обратно в строку 
Dim uT( 0  To  3 ) As Byte

CopyMemory uT( 0 ), ByVal VarPtr(lngResult),  4 

Dim strItog As String
strItog = StrConv(uT, vbUnicode)

Debug.Print strItog

End Sub

ЗЫ1
про Ваш код - не знаю к счастью или к сожалению - "своего" в жизни не строчки не написал.


(с выражением лица)
...
Рейтинг: 0 / 0
24.08.2004, 13:46:11
    #32662972
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
[quot Serge Gavrilov]
Код: plaintext
1.
2.
3.
4.
5.
Function Str2Long(ByVal str As String) As Long
    Dim bSource() As Byte
...
    bSource() = str
...
End Function
- Сергей, меня очень заинтересовала эта конструкция. Не думал, что так можно!

Но самое интересное, что вот так:
Код: plaintext
1.
Dim iSource() As Integer
    iSource() = str
- уже нельзя!!!
...
Рейтинг: 0 / 0
24.08.2004, 13:54:56
    #32663009
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
Иван FXS[quot Serge Gavrilov]
Код: plaintext
1.
2.
3.
4.
5.
Function Str2Long(ByVal str As String) As Long
    Dim bSource() As Byte
...
    bSource() = str
...
End Function
- Сергей, меня очень заинтересовала эта конструкция. Не думал, что так можно!

Но самое интересное, что вот так:
Код: plaintext
1.
Dim iSource() As Integer
    iSource() = str
- уже нельзя!!!

Почему-то мне кажется это логичным :)
...
Рейтинг: 0 / 0
24.08.2004, 14:01:31
    #32663033
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
Serge Gavrilov Иван FXS[quot Serge Gavrilov]
Код: plaintext
1.
2.
3.
4.
5.
Function Str2Long(ByVal str As String) As Long
    Dim bSource() As Byte
...
    bSource() = str
...
End Function
- Сергей, меня очень заинтересовала эта конструкция. Не думал, что так можно!

Но самое интересное, что вот так:
Код: plaintext
1.
Dim iSource() As Integer
    iSource() = str
- уже нельзя!!!

Почему-то мне кажется это логичным :)

И какова логика?
...
Рейтинг: 0 / 0
24.08.2004, 14:06:45
    #32663052
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
авторИ какова логика?

Аристотелевская ...
...
Рейтинг: 0 / 0
24.08.2004, 14:10:31
    #32663062
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
и еще на ту же тему:
Код: plaintext
1.
2.
3.
4.
For i =  0  To  255 
               Dim bSource() As Byte
                   bSource() = Chr(i)
    Debug.Print i, bSource( 0 ), bSource( 1 )
Next

Имеем "выдачу":
0 0 0
1 1 0
2 2 0
3 3 0
...
125 125 0
126 126 0
127 127 0
128 2 4
129 3 4
130 26 32
131 83 4
132 30 32
133 38 32
134 32 32
135 33 32
136 172 32
137 48 32
138 9 4
139 57 32
140 10 4
141 12 4
142 11 4
143 15 4
144 82 4
145 24 32
146 25 32
147 28 32
148 29 32
149 34 32
150 19 32
151 20 32
152 152 0
153 34 33
154 89 4
155 58 32
156 90 4
157 92 4
158 91 4
159 95 4
160 160 0
161 14 4
162 94 4
163 8 4
164 164 0
165 144 4
166 166 0
167 167 0
168 1 4
169 169 0
170 4 4
171 171 0
172 172 0
173 173 0
174 174 0
175 7 4
176 176 0
177 177 0
178 6 4
179 86 4
180 145 4
181 181 0
182 182 0
183 183 0
184 81 4
185 22 33
186 84 4
187 187 0
188 88 4
189 5 4
190 85 4
191 87 4
192 16 4
193 17 4
194 18 4
195 19 4
196 20 4
197 21 4
198 22 4
199 23 4
200 24 4
201 25 4
202 26 4
203 27 4
204 28 4
205 29 4
206 30 4
207 31 4
208 32 4
209 33 4
210 34 4
211 35 4
212 36 4
213 37 4
214 38 4
215 39 4
216 40 4
217 41 4
218 42 4
219 43 4
220 44 4
221 45 4
222 46 4
223 47 4
224 48 4
225 49 4
226 50 4
227 51 4
228 52 4
229 53 4
230 54 4
231 55 4
232 56 4
233 57 4
234 58 4
235 59 4
236 60 4
237 61 4
238 62 4
239 63 4
240 64 4
241 65 4
242 66 4
243 67 4
244 68 4
245 69 4
246 70 4
247 71 4
248 72 4
249 73 4
250 74 4
251 75 4
252 76 4
253 77 4
254 78 4
255 79 4

- есть ли тут какая-то закономерность?
...
Рейтинг: 0 / 0
24.08.2004, 14:40:07
    #32663140
Q: как преобразовать String*4 в Long? И - обратно? (-)
автор- есть ли тут какая-то закономерность?
есть
преобразование ANSI->Unicode
...
Рейтинг: 0 / 0
24.08.2004, 15:27:53
    #32663266
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
То есть Вы хотите сказать, что это - "таблица соответствия", и никакой иной "логики" тут нет?
...
Рейтинг: 0 / 0
24.08.2004, 15:52:40
    #32663333
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: как преобразовать String*4 в Long? И - обратно? (-)
В общем - по сабджу - у меня получился такой "замес" из StrConv и LSet:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Public Type Long_in_Record__type
    llll As Long
End Type

Public Type String2_in_Record__type
    ssss As String *  2 
End Type
 '______________________________________________________________ 

Private Sub String4_to_Long__TESTTTTTTTTTTTTTTTTTTTTTTTTTT()
Dim s1 As String, L As Long, s2 As String

Dim s1 As String, ll As Long, s2 As String

s1 = "ЯЯЯЯ"
ll = String4_to_Long(s1)
s2 = Long_to_String4(ll)

Debug.Print s1, ll, s2
End Sub
 '______________________________________________________________ 

Public Function String4_to_Long(ByVal StringVal As String) As Long
Dim s2 As String2_in_Record__type
    s2.ssss = StrConv(StringVal, vbFromUnicode)
              
              Dim llll As Long_in_Record__type
             LSet llll = s2
String4_to_Long = llll.llll
End_SFP: End Function
 '______________________________________________________________ 

Public Function Long_to_String4(ByVal LongVal As Long) As String
Dim llll As Long_in_Record__type
    llll.llll = LongVal
    
 Dim s2 As String2_in_Record__type
LSet s2 = llll
    
Long_to_String4 = StrConv(s2.ssss, vbUnicode)
End Function
- хотя, если честно, улитка, требующая создания специального ПОЛЬЗОВАТЕЛЬСКОГО ТИПА ... или даже двух ... не кажется мне слишком удачной
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Q: как преобразовать String*4 в Long? И - обратно? (-) / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]