具体点问,怎样在一个TextBox里面,最后的汉字显示出来!!

rapidoit 2004-01-06 06:08:49
怎样获得指定文件的偏移地址的内容??
offset是文件的偏移地址,File Byte是具体的Byte值
<offset> 94h 95h 96h 97h
<File Byte> CE F7 C4 CF
<Text> 西 南
具体点问,怎样在一个TextBox吧最后的汉字显示出来??就是“西南”两字!
...全文
98 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
LVOLCANO 2004-01-07
  • 打赏
  • 举报
回复
Imports System
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit

_

Class DynamicJumpTableDemo

Public Shared Function BuildMyType() As Type

Dim myDomain As AppDomain = Thread.GetDomain()
Dim myAsmName As New AssemblyName()
myAsmName.Name = "MyDynamicAssembly"

Dim myAsmBuilder As AssemblyBuilder = myDomain.DefineDynamicAssembly(myAsmName, _
AssemblyBuilderAccess.Run)
Dim myModBuilder As ModuleBuilder = myAsmBuilder.DefineDynamicModule("MyJumpTableDemo")

Dim myTypeBuilder As TypeBuilder = myModBuilder.DefineType("JumpTableDemo", _
TypeAttributes.Public)
Dim myMthdBuilder As MethodBuilder = myTypeBuilder.DefineMethod("SwitchMe", _
MethodAttributes.Public Or MethodAttributes.Static, _
GetType(String), New Type() {GetType(Integer)})

Dim myIL As ILGenerator = myMthdBuilder.GetILGenerator()

Dim defaultCase As Label = myIL.DefineLabel()
Dim endOfMethod As Label = myIL.DefineLabel()

' We are initializing our jump table. Note that the labels
' will be placed later using the MarkLabel method.

Dim jumpTable() As Label = {myIL.DefineLabel(), _
myIL.DefineLabel(), _
myIL.DefineLabel(), _
myIL.DefineLabel(), _
myIL.DefineLabel()}

' arg0, the number we passed, is pushed onto the stack.
' In this case, due to the design of the code sample,
' the value pushed onto the stack happens to match the
' index of the label (in IL terms, the index of the offset
' in the jump table). If this is not the case, such as
' when switching based on non-integer values, rules for the correspondence
' between the possible case values and each index of the offsets
' must be established outside of the ILGenerator.Emit calls,
' much as a compiler would.

myIL.Emit(OpCodes.Ldarg_0)
myIL.Emit(OpCodes.Switch, jumpTable)

' Branch on default case
myIL.Emit(OpCodes.Br_S, defaultCase)

' Case arg0 = 0
myIL.MarkLabel(jumpTable(0))
myIL.Emit(OpCodes.Ldstr, "are no bananas")
myIL.Emit(OpCodes.Br_S, endOfMethod)

' Case arg0 = 1
myIL.MarkLabel(jumpTable(1))
myIL.Emit(OpCodes.Ldstr, "is one banana")
myIL.Emit(OpCodes.Br_S, endOfMethod)

' Case arg0 = 2
myIL.MarkLabel(jumpTable(2))
myIL.Emit(OpCodes.Ldstr, "are two bananas")
myIL.Emit(OpCodes.Br_S, endOfMethod)

' Case arg0 = 3
myIL.MarkLabel(jumpTable(3))
myIL.Emit(OpCodes.Ldstr, "are three bananas")
myIL.Emit(OpCodes.Br_S, endOfMethod)

' Case arg0 = 4
myIL.MarkLabel(jumpTable(4))
myIL.Emit(OpCodes.Ldstr, "are four bananas")
myIL.Emit(OpCodes.Br_S, endOfMethod)

' Default case
myIL.MarkLabel(defaultCase)
myIL.Emit(OpCodes.Ldstr, "are many bananas")

myIL.MarkLabel(endOfMethod)
myIL.Emit(OpCodes.Ret)

Return myTypeBuilder.CreateType()

End Function 'BuildMyType


Public Shared Sub Main()

Dim myType As Type = BuildMyType()

Console.Write("Enter an integer between 0 and 5: ")
Dim theValue As Integer = Convert.ToInt32(Console.ReadLine())

Console.WriteLine("---")
Dim myInstance As [Object] = Activator.CreateInstance(myType, New Object() {})
Console.WriteLine("Yes, there {0} today!", myType.InvokeMember("SwitchMe", _
BindingFlags.InvokeMethod, Nothing, _
myInstance, New Object() {theValue}))

End Sub 'Main

End Class 'DynamicJumpTableDemo

看看这个对你有用不?
LVOLCANO 2004-01-07
  • 打赏
  • 举报
回复
ILGenerator.Emit 方法 [Visual Basic]请参见
ILGenerator 类 | ILGenerator 成员 | System.Reflection.Emit 命名空间 | C++ 托管扩展编程
将指令放到实时 (JIT) 编译器的 Microsoft 中间语言 (MSIL) 流上。

重载列表
将指定的指令放到指令流上。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode)
[C#] public virtual void Emit(OpCode);
[C++] public: virtual void Emit(OpCode);
[JScript] public function Emit(OpCode);
将指定的指令和字符参数放在 Microsoft 中间语言 (MSIL) 指令流上。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode, Byte)
[C#] public virtual void Emit(OpCode, byte);
[C++] public: virtual void Emit(OpCode, unsigned char);
[JScript] public function Emit(OpCode, Byte);
将指定构造函数的指定指令和元数据标记放到 Microsoft 中间语言 (MSIL) 指令流上。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode, ConstructorInfo)
[C#] public virtual void Emit(OpCode, ConstructorInfo);
[C++] public: virtual void Emit(OpCode, ConstructorInfo*);
[JScript] public function Emit(OpCode, ConstructorInfo);
将指定的指令和数值参数放在 Microsoft 中间语言 (MSIL) 指令流上。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode, Double)
[C#] public virtual void Emit(OpCode, double);
[C++] public: virtual void Emit(OpCode, double);
[JScript] public function Emit(OpCode, double);
将指定字段的指定指令和元数据标记放到 Microsoft 中间语言 (MSIL) 指令流上。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode, FieldInfo)
[C#] public virtual void Emit(OpCode, FieldInfo);
[C++] public: virtual void Emit(OpCode, FieldInfo*);
[JScript] public function Emit(OpCode, FieldInfo);
将指定的指令和数值参数放在 Microsoft 中间语言 (MSIL) 指令流上。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode, Short)
[C#] public virtual void Emit(OpCode, short);
[C++] public: virtual void Emit(OpCode, short);
[JScript] public function Emit(OpCode, Int16);
将指定的指令和数值参数放在 Microsoft 中间语言 (MSIL) 指令流上。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode, Integer)
[C#] public virtual void Emit(OpCode, int);
[C++] public: virtual void Emit(OpCode, int);
[JScript] public function Emit(OpCode, int);
将指定的指令和数值参数放在 Microsoft 中间语言 (MSIL) 指令流上。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode, Long)
[C#] public virtual void Emit(OpCode, long);
[C++] public: virtual void Emit(OpCode, __int64);
[JScript] public function Emit(OpCode, long);
将指定的指令放在 Microsoft 中间语言 (MSIL) 流上,并留出在完成修正时加上标签所需的空白。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode, Label)
[C#] public virtual void Emit(OpCode, Label);
[C++] public: virtual void Emit(OpCode, Label);
[JScript] public function Emit(OpCode, Label);
将指定的指令放在 Microsoft 中间语言 (MSIL) 流上,并留出在完成修正时加上标签所需的空白。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode, Label())
[C#] public virtual void Emit(OpCode, Label[]);
[C++] public: virtual void Emit(OpCode, Label[]);
[JScript] public function Emit(OpCode, Label[]);
将指定的指令放到 Microsoft 中间语言 (MSIL) 流上,后跟给定局部变量的索引。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode, LocalBuilder)
[C#] public virtual void Emit(OpCode, LocalBuilder);
[C++] public: virtual void Emit(OpCode, LocalBuilder*);
[JScript] public function Emit(OpCode, LocalBuilder);
将指定的指令放到 Microsoft 中间语言 (MSIL) 流上,后跟给定方法的元数据标记。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode, MethodInfo)
[C#] public virtual void Emit(OpCode, MethodInfo);
[C++] public: virtual void Emit(OpCode, MethodInfo*);
[JScript] public function Emit(OpCode, MethodInfo);
将指定的指令和字符参数放在 Microsoft 中间语言 (MSIL) 指令流上。此方法不符合 CLS。

[Visual Basic] Overloads Public Sub Emit(OpCode, SByte)
[C#] public void Emit(OpCode, sbyte);
[C++] public: void Emit(OpCode, char);
[JScript] public function Emit(OpCode, SByte);
将指定的指令和签名标记放在 Microsoft 中间语言 (MSIL) 指令流上。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode, SignatureHelper)
[C#] public virtual void Emit(OpCode, SignatureHelper);
[C++] public: virtual void Emit(OpCode, SignatureHelper*);
[JScript] public function Emit(OpCode, SignatureHelper);
将指定的指令和数值参数放在 Microsoft 中间语言 (MSIL) 指令流上。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode, Single)
[C#] public virtual void Emit(OpCode, float);
[C++] public: virtual void Emit(OpCode, float);
[JScript] public function Emit(OpCode, float);
将指定的指令放到 Microsoft 中间语言 (MSIL) 流上,后跟给定字符串的元数据标记。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode, String)
[C#] public virtual void Emit(OpCode, string);
[C++] public: virtual void Emit(OpCode, String*);
[JScript] public function Emit(OpCode, String);
将指定的指令放到 Microsoft 中间语言 (MSIL) 流上,后跟给定类型的元数据标记。

[Visual Basic] Overloads Public Overridable Sub Emit(OpCode, Type)
[C#] public virtual void Emit(OpCode, Type);
[C++] public: virtual void Emit(OpCode, Type*);
[JScript] public function Emit(OpCode, Type);
示例
[Visual Basic, C#, C++] 下面的代码示例阐释了如何用跳转表创建动态方法。使用 Label 数组创建跳转表。

[Visual Basic, C#, C++] 注意 此示例显示如何使用 Emit 的一个重载版本。有关其他可用示例,请参阅单独的重载主题。
sumtec 2004-01-07
  • 打赏
  • 举报
回复
上面有人给出的Emit我不知道它是怎么了,好像好几次都是这样。

指定偏移量的内容你用fs.Seek( , )就可以指定位置了。
指定之后用FileStream的方法读出一段byte数组,然后用Encoding.GetEncoding("GB2312").GetString,或者用BinaryReader(构造的时候用前面的GetEncoding("GB2312")初始化)读String。(注:Imports System.Text)


onionertou 2004-01-07
  • 打赏
  • 举报
回复
他们给的好像我看不懂哦,好好研究学习。。。
我试了一下,用数组可以,但不能用cstr函数,你看看下面的代码:

Private Sub btnView_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnView.Click
Dim temp(3) As Byte
temp(0) = &HCE
temp(1) = &HF7
temp(2) = &HC4
temp(3) = &HCF
Me.Label1.Text = System.Text.Encoding.Default.GetString(temp)
End Sub

用的是System.Text.Encoding.Default.GetString(byte())运行后结果显示就是“西南”,你试试。
rapidoit 2004-01-06
  • 打赏
  • 举报
回复
up
onionertou 2004-01-06
  • 打赏
  • 举报
回复
嗯,在vb6里面有个函数cstr(),你可以把这个数值赋给一个数组,比如你已经知道了4个byte的数字,想把它用textbox显示出来,你可以这样:(.net我不熟,先用vb6描述一下)
dim temp(0 to 3) as byte
temp(0)=&HCE '&H是转换十六进制到十进制
temp(1)=&HF7
temp(2)=&HC4
temp(3)=&HCF
textbox.text=trim(cstr(temp))
这样就应该是显示“西南”了,我去vb.net看看有没有这个函数
Mervyn 2004-01-06
  • 打赏
  • 举报
回复
up

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧